Merge branch 'master' of ssh://forge.april.org:221/Chapril/mobilizon.chapril.org-tools

This commit is contained in:
tykayn 2020-11-26 17:19:23 +01:00 committed by root
commit 962747e932
9 changed files with 235 additions and 13 deletions

75
.gitignore vendored Normal file
View File

@ -0,0 +1,75 @@
# Created by .ignore support plugin (hsz.mobi)
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
.idea
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/mobilizon.chapril.org-tools.iml" filepath="$PROJECT_DIR$/.idea/mobilizon.chapril.org-tools.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

70
.idea/workspace.xml Normal file
View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="76e62301-cc1d-40d1-8025-77ac5d7e8dda" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ComposerSettings">
<execution />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectId" id="1kEGuLSSTM6Dx3fhMyumeTik3ys" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="autoscrollFromSource" value="true" />
<option name="autoscrollToSource" value="true" />
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="ASKED_SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="vue.rearranger.settings.migration" value="true" />
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="76e62301-cc1d-40d1-8025-77ac5d7e8dda" name="Default Changelist" comment="" />
<created>1605258558512</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1605258558512</updated>
<workItem from="1605258559558" duration="1754000" />
<workItem from="1605602229773" duration="5663000" />
<workItem from="1605690163417" duration="137000" />
<workItem from="1606396769239" duration="2931000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="UnknownFeatures">
<option featureType="com.intellij.fileTypeFactory" implementationName="*.sh" />
</component>
<component name="WindowStateProjectService">
<state x="1980" y="174" key="#Plugins" timestamp="1605258857518">
<screen x="0" y="24" width="3440" height="1353" />
</state>
<state x="1980" y="174" key="#Plugins/0.24.3440.1353@0.24.3440.1353" timestamp="1605258857518" />
<state x="439" y="324" key="run.anything.popup" timestamp="1605609348424">
<screen x="0" y="24" width="3440" height="1353" />
</state>
<state x="439" y="324" key="run.anything.popup/0.24.3440.1353@0.24.3440.1353" timestamp="1605609348424" />
</component>
</project>

51
README.md Normal file
View File

@ -0,0 +1,51 @@
#Mobilizon Chapril Tools
## Monitoring
Surveiller les signes de vie du site depuis Icinga.
https://icinga.chapril.org
## Rapport d'activité
Générer un rapport incluant des statistiques à propos de l'utilisation du site et le publier dans un ticket Redmine de Agir.chapril.org
## Statistiques
obtention des statistiques publiques de l'instance par une requête GraphQL à l'url https://mobilizon.chapril.org/api/ dont le corps est:
```graphql
{
statistics {
numberOfUsers
numberOfEvents
numberOfLocalEvents
numberOfComments
numberOfLocalComments
numberOfGroups
numberOfLocalGroups
numberOfInstanceFollowers
numberOfInstanceFollowings
}
}
```
exemple de réponse:
```
{
"data": {
"statistics": {
"numberOfComments": 9,
"numberOfEvents": 45,
"numberOfGroups": 7,
"numberOfInstanceFollowers": 0,
"numberOfInstanceFollowings": 1,
"numberOfLocalComments": 0,
"numberOfLocalEvents": 0,
"numberOfLocalGroups": 0,
"numberOfUsers": 1
}
}
}
```
Détail des paramètres à demander sur la doc:
https://framagit.org/framasoft/mobilizon/-/blob/master/js/schema.graphql
On peut tester des requêtes sur cette sandbox
https://mobilizon.fr/graphiql

View File

@ -26,15 +26,14 @@ else
lastVersion=$(curl -s https://framagit.org/api/v4/projects/$FRAMAGIT_PROJECT_ID/releases | jshon -a -e name|cut -d '"' -f2|grep -v '[\^\(alpha\)]'|head -n 1) lastVersion=$(curl -s https://framagit.org/api/v4/projects/$FRAMAGIT_PROJECT_ID/releases | jshon -a -e name|cut -d '"' -f2|grep -v '[\^\(alpha\)]'|head -n 1)
currentVersion=$(cd $LOCAL_REPO && git branch | grep '*'|cut -c 3-100 ) currentVersion=$(cd $LOCAL_REPO && git branch | grep '*'|cut -c 3-100 )
# echo "current version: $currentVersion" echo "current version: $currentVersion"
# echo "last version: $lastVersion" echo "last version: $lastVersion"
if [ $currentVersion = $lastVersion ]; then if [ $currentVersion = $lastVersion ]; then
echo "OK" echo "OK"
result=0 result=0
else else
echo "WARNING : new version available, current is $currentVersion, last is $lastVersion." echo "WARNING : new version available, current is $currentVersion, last is $lastVersion."
result=1 result=2
fi fi
fi fi
exit $result exit $result

View File

@ -0,0 +1 @@
5 0 1 * * root /srv/mobilizon.chapril.org/tools/rapport_activite/rapport_activite.sh -p >> /srv/mobilizon.chapril.org/Exploitation/rapport_mobilizon.log 2>&1

View File

@ -18,11 +18,12 @@
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# # access_log /var/log/nginx/mobilizon.chapril.org/mobilizon.chapril.org-access.log
# error_log /var/log/nginx/mobilizon.chapril.org/mobilizon.chapril.org-error.log
# ============================================ # ============================================
LOG_PREFIX="/var/log/apache2/mobilizon.chapril.org/mobilizon.chapril.org" LOG_PREFIX="/var/log/nginx/mobilizon.chapril.org/mobilizon.chapril.org"
SERVICE_NAME="mobilizon.chapril.org" SERVICE_NAME="mobilizon.chapril.org"
source "/etc/mobilizon.chapril.org/mobilizonchaprilorg.conf" source "/etc/mobilizon.chapril.org/mobilizonchaprilorg.conf"
@ -48,7 +49,7 @@ generateHTTPReport()
echo "=§= Rapport d'activité HTTP" echo "=§= Rapport d'activité HTTP"
echo echo
local httpRequestCount=$(zgrep "$monthEnglish" $LOG_PREFIX-access.log*|grep $year|wc -l) local httpRequestCount=$(zgrep "$monthEnglish" $LOG_PREFIX-access.log*|grep $year|wc -l)
echo "Nombre total de requêtes http = $httpRequestCount" echo "Nombre total de requêtes http = $httpRequestCount"
@ -63,7 +64,7 @@ generateHTTPReport()
local ipv4VisitorCount=$(zgrep -h "$monthEnglish" $LOG_PREFIX-access.log*|grep "$year"|grep -vi bot|grep -v check_http|egrep "^$IPV4_PATTERN "|cut -d' ' -f1|sort|uniq|wc -l ) local ipv4VisitorCount=$(zgrep -h "$monthEnglish" $LOG_PREFIX-access.log*|grep "$year"|grep -vi bot|grep -v check_http|egrep "^$IPV4_PATTERN "|cut -d' ' -f1|sort|uniq|wc -l )
echo "Nombre d'ipv4 ayant visité le service = $ipv4VisitorCount" echo "Nombre d'ipv4 ayant visité le service = $ipv4VisitorCount"
local ipv6VisitorCount=$(zgrep -h "$monthEnglish" $LOG_PREFIX-access.log*|grep "$year"|grep -vi bot|grep -v check_http|egrep "^$IPV6_PATTERN "|cut -d' ' -f1|sort|uniq|wc -l ) local ipv6VisitorCount=$(zgrep -h "$monthEnglish" $LOG_PREFIX-access.log*|grep "$year"|grep -vi bot|grep -v check_http|egrep "^$IPV6_PATTERN "|cut -d' ' -f1|sort|uniq|wc -l )
echo "Nombre d'ipv6 ayant visité le service = $ipv6VisitorCount" echo "Nombre d'ipv6 ayant visité le service = $ipv6VisitorCount"
@ -84,13 +85,16 @@ generateSpecificReport()
ipv4UserCount=$(zgrep -h "$monthEnglish" $LOG_PREFIX-access.log*|grep "$year"|grep -vi bot|grep -v check_http|egrep "^$IPV4_PATTERN " | cut -d' ' -f 1|sort|uniq|wc -l ) ipv4UserCount=$(zgrep -h "$monthEnglish" $LOG_PREFIX-access.log*|grep "$year"|grep -vi bot|grep -v check_http|egrep "^$IPV4_PATTERN " | cut -d' ' -f 1|sort|uniq|wc -l )
echo "Nombre d'ipv4 utilisatrices du service = $ipv4UserCount" echo "Nombre d'ipv4 utilisatrices du service = $ipv4UserCount"
ipv6UserCount=$(zgrep -h "$monthEnglish" $LOG_PREFIX-access.log*|grep "$year"|grep -vi bot|gre\p -v check_http|egrep "^$IPV6_PATTERN " | cut -d' ' -f 1|sort|uniq|wc -l ) ipv6UserCount=$(zgrep -h "$monthEnglish" $LOG_PREFIX-access.log*|grep "$year"|grep -vi bot|gre\p -v check_http|egrep "^$IPV6_PATTERN " | cut -d' ' -f 1|sort|uniq|wc -l )
echo "Nombre d'ipv6 utilisatrices du service = $ipv6UserCount" echo "Nombre d'ipv6 utilisatrices du service = $ipv6UserCount"
echo "Nombre total d'ip utilisatrices du service = $((ipv4UserCount+ipv6UserCount))" echo "Nombre total d'ip utilisatrices du service = $((ipv4UserCount+ipv6UserCount))"
echo # TODO métriques à récupérer
# https://docs.joinmobilizon.org/contribute/graphql_api/
echo "Nombre de comptes utilisateurs"
echo "Nombre d'évènements passés"
echo "Nombre d'évènements à venir"
echo echo
} }
@ -136,7 +140,7 @@ elif [ "$#" -eq 2 ]; then
elif ! (let "$2") 2>/dev/null; then elif ! (let "$2") 2>/dev/null; then
echo -e "L'année doit être numérique." echo -e "L'année doit être numérique."
help help
elif [ "$2" -lt 2018 ] || [ "$2" -gt "$(date +%Y)" ]; then elif [ "$2" -lt 2018 ] || [ "$2" -gt "$(date +%Y)" ]; then
echo -e "Année non valable $2." echo -e "Année non valable $2."
help help
elif [ "$2" -le 2017 ] || [ "$2" -ge $(($(date +%Y)+1)) ] ; then elif [ "$2" -le 2017 ] || [ "$2" -ge $(($(date +%Y)+1)) ] ; then
@ -147,7 +151,7 @@ elif [ "$#" -eq 2 ]; then
yearMonth="$2-0$1" yearMonth="$2-0$1"
else else
yearMonth="$2-$1" yearMonth="$2-$1"
fi fi
monthEnglish=$(LANG=en_EN.UTF-8;date -d "$2-$1-01" +%b) monthEnglish=$(LANG=en_EN.UTF-8;date -d "$2-$1-01" +%b)
year="$2" year="$2"
generateReport "$monthEnglish" "$year" "$yearMonth" generateReport "$monthEnglish" "$year" "$yearMonth"