Add stats dashboard screenshots #3

Merged
thopic merged 5 commits from stats-img into master 2021-11-19 17:48:07 +01:00
6 changed files with 112 additions and 106 deletions

1
.env.example Normal file
View File

@ -0,0 +1 @@
ES_TOKEN = ""

3
.gitignore vendored
View File

@ -1,3 +1,6 @@
credentials.info
html/.htpasswd
html/.htaccess
.env
geckodriver.log
html/ressources/stats

View File

@ -189,6 +189,10 @@
à leur arrêt définitif de manière imprévue, sans organiser et faciliter au préalable la migration des utilisateurices vers une autre instance ou plateforme.<br>
Enfin, ce site web semble indispensable à la présentation de GNOUS, et n'est par conséquent pas non plus destiné à disparaître inopinément.</p>
<p>Une <a href="stats.php" title="https://www.gnous.fr/stats.php">page</a> est dédiée aux statistiques d'utilisation des services et donne des vues à la journée, à la semaine, au mois et à l'année.
Les graphiques sont actualisés quotidiennement vers minuit.
</p>
<p>Tous les services proposés par GNOUS ne sont pas référencés sur ce site web, leur usage pouvant être personnel ou réservé à un public restreint.
Les utilisateurices sont cependant invité·es à <a href="contact.php"
title="contact.php">nous contacter</a> si ils ou elles ont besoin d'un service particulier (sans pour autant aucune garantie quant à leur déploiement).</p>
@ -206,60 +210,6 @@
Mattermost ne soit pas trop importante (du moins pour l'instant). </li>
</ul>
<?php
$url = "https://mattermost.gnous.fr/api/v4/analytics/old";
$headers = array(
"Accept: application/json",
"Authorization: Bearer ".$_ENV["MM_TOKEN"],
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data_json = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
if ($status_code==200) {
$data = json_decode($data_json, true);
$channel_count = $data[0]['value'] + $data[1]['value'];
$message_count = $data[2]['value'];
$user_count = $data[3]['value'];
$team_count = $data[4]['value'];
?>
Chiffres (mis à jour en temps réel) :
<table border="1">
<tbody>
<tr>
<td>Utilisateurices</td>
<td><?php echo $user_count;?></td>
</tr>
<tr>
<td>Équipes</td>
<td><?php echo $team_count;?></td>
</tr>
<tr>
<td>Canaux</td>
<td><?php echo $channel_count;?></td>
</tr>
<tr>
<td>Messages</td>
<td><?php echo $message_count;?></td>
</tr>
</tbody>
</table>
<?php
} else {
echo "<i>Statistiques momentanément indisponibles.</i>";
}
?>
<h4 id="nextcloud">Nextcloud</h4>
<p>Le logiciel libre <a href="https://nextcloud.com/" target="_blank" title="https://nextcloud.com/ (nouvel onglet)">Nextcloud</a> est le
troisième service (le second étant ce site) mis en place avec GNOUS.
@ -268,58 +218,6 @@ if ($status_code==200) {
les fichiers qu'on envoie habituellement par mail, et alléger ainsi toute
l'infrastructure du mail.</p>
<?php
$url = "https://cloud.gnous.fr/ocs/v2.php/apps/serverinfo/api/v1/info?format=json";
$headers = array(
"Accept: application/json",
"OCS-APIRequest: true",
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERPWD, $_ENV["NEXTCLOUD_USER"].":".$_ENV["NEXTCLOUD_TOKEN"]);
$data_json = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
if ($status_code==200) {
$data = json_decode($data_json, true);
$nextcloud_data = $data['ocs']['data']['nextcloud'];
$user_count = $nextcloud_data['storage']['num_users'];
$file_count = $nextcloud_data['storage']['num_files'];
$share_count = $nextcloud_data['shares']['num_shares'];
?>
Chiffres (mis à jour en temps réel) :
<table border="1">
<tbody>
<tr>
<td>Utilisateurices</td>
<td><?php echo $user_count;?></td>
</tr>
<tr>
<td>Fichiers</td>
<td><?php echo $file_count;?></td>
</tr>
<tr>
<td>Partages de fichiers</td>
<td><?php echo $share_count;?></td>
</tr>
</tbody>
</table>
<?php
} else {
echo "<i>Statistiques momentanément indisponibles.</i>";
}
?>
<h4 id="mailcow">Mailcow</h4>
<p>Depuis mars 2021 GNOUS dispose d'un serveur de mail basé sur la solution libre <a href="https://mailcow.email/" target="_blank" title="https://mailcow.email/ (nouvel onglet)">Mailcow</a>.
Ce service permet d'envoyer et de recevoir des mails avec une adresse en <code>@gnous.fr</code>, ou tout autre domaine administré par GNOUS. Les mails sont également consultables au moyen d'un <a href="https://webmail.gnous.fr/" target="_blank" title="https://webmail.gnous.fr/ (nouvel onglet)">webmail</a>.</p>

View File

@ -1,6 +1,7 @@
<hr>
<p id="menu"><a href="index.php" title="https://www.gnous.fr/">Accueil</a>
| <a href="apropos.php" title="https://www.gnous.fr/apropos.php">À propos</a>
| <a href="stats.php" title="https://www.gnous.fr/stats.php">Statistiques</a>
| <a href="https://mattermost.gnous.fr/" target="_blank" title="https://mattermost.gnous.fr/ (nouvel onglet)">Mattermost</a>
| <a href="https://cloud.gnous.fr/" target="_blank" title="https://cloud.gnous.fr/ (nouvel onglet)">Nextcloud</a>
| <a href="https://travaux.gnous.fr/" target="_blank" title="https://travaux.gnous.fr/ (nouvel onglet)">Travaux</a>

70
html/stats.php Normal file
View File

@ -0,0 +1,70 @@
<?php
$this_file = basename($_SERVER["SCRIPT_FILENAME"]);
?>
<!DOCTYPE HTML>
<html>
<HEAD>
<meta charset="UTF-8">
<title>Statistiques</title>
<link rel="SHORTCUT ICON" HREF="ressources/logo.svg">
<style>
img {
max-width: 100%;
height: auto;
}
</style>
</HEAD>
<BODY>
<CENTER>
<?php include 'includes/titre.php'; ?>
<i>Cette page vous donne quelques chiffres sur l'utilisation des services.</i><br><br>
<?php include 'includes/menu.php'; ?>
</CENTER>
<?php include 'includes/mtime.php'; ?>
<b>NOTA :</b> Les graphiques sont actualisés quotidiennement vers minuit (heure de Paris).
<h2 id="sommaire">Sommaire</h2>
<ul>
<li> <a href="#mm" title="https://www.gnous.fr/stats.php#mm">Mattermost</a></li>
<ul>
<li> <a href="#mm24h" title="https://www.gnous.fr/stats.php#mm24h">Dernières 24h</a></li>
<li> <a href="#mm7d" title="https://www.gnous.fr/stats.php#mm7d">Dernière semaine</a></li>
<li> <a href="#mm1M" title="https://www.gnous.fr/stats.php#mm1M">Dernier mois</a></li>
<li> <a href="#mm1y" title="https://www.gnous.fr/stats.php#mm1y">Dernière année</a></li>
</ul>
<li> <a href="#nc" title="https://www.gnous.fr/stats.php#nc">Nextcloud</a></li>
<ul>
<li> <a href="#nc24h" title="https://www.gnous.fr/stats.php#nc24h">Dernières 24h</a></li>
<li> <a href="#nc7d" title="https://www.gnous.fr/stats.php#nc7d">Dernière semaine</a></li>
<li> <a href="#nc1M" title="https://www.gnous.fr/stats.php#nc1M">Dernier mois</a></li>
<li> <a href="#nc1y" title="https://www.gnous.fr/stats.php#nc1y">Dernière année</a></li>
</ul>
</ul>
<h2 id=mm>Mattermost</h2>
<h3 id=mm24h>Dernières 24h</h3>
<a href="/ressources/stats/mm24h.png" target="_blank" title="Mattermost - Dernières 24h"><img src="ressources/stats/mm24h.png"></a><br>
<h3 id=mm7d>Dernière semaine</h3>
<a href="/ressources/stats/mm7d.png" target="_blank" title="Mattermost - Dernière semaine"><img src="ressources/stats/mm7d.png"></a><br>
<h3 id=mm1M>Dernier mois</h3>
<a href="/ressources/stats/mm1M.png" target="_blank" title="Mattermost - Dernier mois"><img src="ressources/stats/mm1M.png"></a><br>
<h3 id=mm1y>Dernière année</h3>
<a href="/ressources/stats/mm1y.png" target="_blank" title="Mattermost - Dernière année"><img src="ressources/stats/mm1y.png"></a><br>
<h2 id=nc>Nextcloud</h2>
<h3 id=nc24h>Dernières 24h</h3>
<a href="/ressources/stats/nc24h.png" target="_blank" title="Nextcloud - Dernières 24h"><img src="ressources/stats/nc24h.png"></a><br>
<h3 id=nc7d>Dernière semaine</h3>
<a href="/ressources/stats/nc7d.png" target="_blank" title="Nextcloud - Dernière semaine"><img src="ressources/stats/nc7d.png"></a><br>
<h3 id=nc1M>Dernier mois</h3>
<a href="/ressources/stats/nc1M.png" target="_blank" title="Nextcloud - Dernier mois"><img src="ressources/stats/nc1M.png"></a><br>
<h3 id=nc1y>Dernière année</h3>
<a href="/ressources/stats/nc1y.png" target="_blank" title="Nextcloud - Dernière année"><img src="ressources/stats/nc1y.png"></a><br>
<?php include 'includes/footer.php'; ?>
</BODY>
</HTML>

33
print_stats.py Executable file
View File

@ -0,0 +1,33 @@
#!/usr/bin/python3
import os
from time import sleep
from dotenv import load_dotenv
from seleniumwire import webdriver
from seleniumwire.webdriver import FirefoxOptions
os.chdir(os.path.dirname(os.path.abspath(__file__)))
load_dotenv()
opts = FirefoxOptions()
opts.add_argument("--headless")
browser = webdriver.Firefox(options=opts,executable_path="/usr/local/bin/geckodriver")
browser.set_window_size(3000, 1120)
def interceptor(request):
request.headers['Authorization'] = 'Basic '+os.environ["ES_TOKEN"]
browser.request_interceptor = interceptor
for duration in ["24h", "7d", "1M", "1y"]:
browser.get("https://mon.gnous.fr/app/dashboards#/view/380099d0-4944-11ec-81a9-95d7ffa23468?embed=true&_g=(filters%3A!()%2CrefreshInterval%3A(pause%3A!t%2Cvalue%3A0)%2Ctime%3A(from%3Anow-"+duration+"%2Cto%3Anow))&hide-filter-bar=true")
sleep(30)
if duration == "24h":
sleep(15)
browser.get_screenshot_as_file("html/ressources/stats/mm"+duration+".png")
for duration in ["24h", "7d", "1M", "1y"]:
browser.get("https://mon.gnous.fr/app/dashboards#/view/ef70de60-4947-11ec-81a9-95d7ffa23468?embed=true&_g=(filters%3A!()%2CrefreshInterval%3A(pause%3A!t%2Cvalue%3A0)%2Ctime%3A(from%3Anow-"+duration+"%2Cto%3Anow))&hide-filter-bar=true")
sleep(30)
browser.get_screenshot_as_file("html/ressources/stats/nc"+duration+".png")
print('done')