Twitter Analytics : Migration des données vers MariaDB pour une utilisation dans Grafana

Les prérequis :

  • Python : Je fais du python3.
  • MariaDB
  • Grafana : J’utilise la version 5.0.0.
  • Linux : J’utilise Ubuntu 18

Voici donc ce que j’ai fait pour avoir mes données sous Grafana.

Etape 1 :

Je vais sur Twitter Analytics : https://analytics.twitter.com/about et je télécharge les fichiers CSV (By Tweet, et non By Day). Normalement j’ai un fichier CSV par mois.

Etape 2 :

Je concatène tous les fichiers CSV dans un seul fichier en supprimant les entetes :

cat tweet_activity_metrics_CYBERNEURONES_20* | grep -v "Identifiant du" > input.csv

Etape 3 :

Je lance le programme en Python pour mettre les données sous MariaDB. A noter que j’ai fait une base et un login pour Twitter avant :

-> create database TWITTERS;
-> CREATE USER 'twitter'@'localhost' IDENTIFIED BY 'twitter';
-> GRANT ALL PRIVILEGES ON TWITTERS.* TO 'twitter'@'localhost';
-> FLUSH PRIVILEGES;

Le programme en Python :

#! /usr/bin/env python3
# ~*~ utf-8 ~*~

import csv
from datetime import datetime
import mysql.connector
from mysql.connector import errorcode
from mysql.connector import (connection)

cnx = connection.MySQLConnection(user='twitter', password='twitter',
                                 host='127.0.0.1',
                                 database='TWITTERS')
cursor = cnx.cursor();
now = datetime.now().date();

#cursor.execute("DROP TABLE TWITTER;");
#cursor.execute("CREATE TABLE TWITTER (IDENTIFIANT varchar(30) UNIQUE,PERMALIEN varchar(200),TEXTE varchar(500),DATE datetime,IMPRESSION float,ENGAGEMENT float,TAUX_ENGAGEMENT float, RETWEET float,REPONSE float, JAIME float, CLIC_PROFIL float, CLIC_URL float, CLIC_HASTAG float, OUVERTURE_DETAIL float, CLIC_PERMALIEN float, OUVERTURE_APP int, INSTALL_APP int, ABONNEMENT int, EMAIL_TWEET int, COMPOSER_NUMERO int, VUE_MEDIA int, ENGAGEMENT_MEDIA int);");
cursor.execute("DELETE FROM TWITTER");

with open('input.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, quotechar='"')
    for row in reader:
        MyDate=row[3].replace(" +0000", ":00")
        MyTexte=row[2].replace("'", " ")
        MyTexte=MyTexte.replace(",", " ")
        MyC4=row[4].replace("Infinity", "0")
        MyC5=row[5].replace("Infinity", "0")
        MyC6=row[6].replace("Infinity", "0")
        MyC6=MyC6.replace("NaN", "0")
        MyC7=row[7].replace("Infinity", "0")
        try :
            cursor.execute("INSERT INTO TWITTER (IDENTIFIANT,PERMALIEN,TEXTE,DATE,IMPRESSION,ENGAGEMENT,TAUX_ENGAGEMENT,RETWEET,REPONSE, JAIME, CLIC_PROFIL, CLIC_URL, CLIC_HASTAG, OUVERTURE_DETAIL, CLIC_PERMALIEN, OUVERTURE_APP, INSTALL_APP, ABONNEMENT, EMAIL_TWEET, COMPOSER_NUMERO, VUE_MEDIA, ENGAGEMENT_MEDIA) VALUES ('"+row[0]+"', '"+row[1]+"', '"+MyTexte+"','"+MyDate+"', "+MyC4+", "+MyC5+", "+MyC6+", "+MyC7+", "+row[8]+","+row[9]+", "+row[10]+", "+row[11]+","+row[12]+","+row[13]+","+row[14]+","+row[15]+","+row[16]+","+row[17]+","+row[18]+","+row[19]+","+row[20]+","+row[21]+");");
        except mysql.connector.Error as err:
            print("Something went wrong: {}".format(err))
            if err.errno == errorcode.ER_BAD_TABLE_ERROR:
                print("Creating table TWITTER")
            else:
                None

cnx.commit();
cursor.close();
cnx.close();

# END 

Etape 4 :

Je configure Grafana pour avoir accès à MariaDB :

Etape 5 :

Faire les graphiques :

– Pour le nombre d’impression par jour :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  SUM(IMPRESSION) as value
FROM TWITTER
WHERE $__timeFilter(date)
GROUP BY DAY(date),MONTH(date),YEAR(date)
ORDER BY date ASC


– Pour le nombre de « J’aime » par jour :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  SUM(JAIME) as value
FROM TWITTER
WHERE $__timeFilter(date)
GROUP BY DAY(date),MONTH(date),YEAR(date)
ORDER BY date ASC


– Pour le nombre de « Clic sur profil » par jour :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  SUM(CLIC_PROFIL) as value
FROM TWITTER
WHERE $__timeFilter(date)
GROUP BY DAY(date),MONTH(date),YEAR(date)
ORDER BY date ASC

– Pour le nombre d’Abonnement par jour :

SELECT
  UNIX_TIMESTAMP(date) as time_sec,
  SUM(ABONNEMENT) as value
FROM TWITTER
WHERE $__timeFilter(date)
GROUP BY DAY(date),MONTH(date),YEAR(date)
ORDER BY date ASC

Il est aussi possible de mettre plusieurs courbes sur le même graphe:

Ubuntu 18 : Installation d’un client NextCloud avec Flatpak

Les commandes pour l’installation :

$ sudo apt install flatpak
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés : 
  libostree-1-1 xdg-desktop-portal xdg-desktop-portal-gtk
Les NOUVEAUX paquets suivants seront installés :
  flatpak libostree-1-1 xdg-desktop-portal xdg-desktop-portal-gtk
0 mis à jour, 4 nouvellement installés, 0 à enlever et 13 non mis à jour.
Il est nécessaire de prendre 1 313 ko dans les archives.
Après cette opération, 5 898 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
...
$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

$ flatpak install flathub org.nextcloud.Nextcloud
Required runtime for org.nextcloud.Nextcloud/x86_64/stable (runtime/org.kde.Platform/x86_64/5.12) found in remote flathub
Do you want to install it? [y/n]: y
Installing in system:
org.kde.Platform/x86_64/5.12                       flathub 8337138165ca
org.freedesktop.Platform.VAAPI.Intel/x86_64/18.08  flathub 227f12933709
org.freedesktop.Platform.html5-codecs/x86_64/18.08 flathub b7006caaf6a7
org.kde.Platform.Locale/x86_64/5.12                flathub b76e501f9811
org.nextcloud.Nextcloud/x86_64/stable              flathub 4755c241adb7
  permissions: ipc, network, wayland, x11, dri
  file access: host, xdg-config/kdeglobals:ro, xdg-run/Nextcloud:create, xdg-run/dconf, ~/.config/dconf:ro
  dbus access: com.canonical.AppMenu.Registrar, org.freedesktop.Notifications, org.freedesktop.secrets, org.kde.StatusNotifierWatcher
org.nextcloud.Nextcloud.Locale/x86_64/stable       flathub f098e4785813
Is this ok [y/n]: y
Installing: org.kde.Platform/x86_64/5.12 from flathub
[####################] 1415 metadata, 27766 content objects fetched; 404772 KiB transferred in 128 seconds
Now at 8337138165ca.
Installing: org.freedesktop.Platform.VAAPI.Intel/x86_64/18.08 from flathub
[####################] 4 metadata, 2 content objects fetched; 1783 KiB transferred in 0 seconds
Now at 227f12933709.
Installing: org.freedesktop.Platform.html5-codecs/x86_64/18.08 from flathub
[####################] 22 metadata, 127 content objects fetched; 3111 KiB transferred in 1 seconds
Now at b7006caaf6a7.
Installing: org.kde.Platform.Locale/x86_64/5.12 from flathub
[####################] 33 metadata, 196 content objects fetched; 5085 KiB transferred in 1 seconds
Now at b76e501f9811.
Installing: org.nextcloud.Nextcloud/x86_64/stable from flathub
[####################] 78 metadata, 221 content objects fetched; 4049 KiB transferred in 2 seconds
Now at 4755c241adb7.
Installing: org.nextcloud.Nextcloud.Locale/x86_64/stable from flathub
[####################] 7 metadata, 2 content objects fetched; 5 KiB transferred in 0 seconds
Now at f098e4785813.

$ flatpak run org.nextcloud.Nextcloud
Gtk-Message: 14:04:44.389: Failed to load module "canberra-gtk-module"
Gtk-Message: 14:04:44.389: Failed to load module "canberra-gtk-module"

On a donc la fenetre suivante qui s’ouvre, et il suffit de faire la configuration :

J’ai pas trop compris l’erreur non bloquante: « canberra-gtk-module », car j’ai pas l’impression de manquer de librairie :

$ sudo apt-get install libcanberra-gtk-module
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
libcanberra-gtk-module est déjà la version la plus récente (0.30-5ubuntu1).
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
  gconf-service gconf-service-backend gconf2 gconf2-common libappindicator1 libdbusmenu-gtk4 libfwup1 libgconf-2-4 libindicator7
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
$ sudo apt install libcanberra-gtk-module libcanberra-gtk3-module
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
libcanberra-gtk3-module est déjà la version la plus récente (0.30-5ubuntu1).
libcanberra-gtk-module est déjà la version la plus récente (0.30-5ubuntu1).
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
  gconf-service gconf-service-backend gconf2 gconf2-common libappindicator1 libdbusmenu-gtk4 libfwup1 libgconf-2-4 libindicator7
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
$ sudo apt-get install libcanberra-gtk-module:i386
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
libcanberra-gtk-module:i386 est déjà la version la plus récente (0.30-5ubuntu1).
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
  gconf-service gconf-service-backend gconf2 gconf2-common libappindicator1 libdbusmenu-gtk4 libfwup1 libgconf-2-4 libindicator7
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

CPU : Comment faire la mesure via un script crontab ?

Je ne sais pas comment faire la mesure via un script sur la crontab … Les données que j’ai sont différentes du CPU History sur Ubuntu.
Actuellement j’utilise :

 "grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)" 

mais j’ai aussi essayé avec le découpage dans top :

top -bn1 | grep "Cpu(s)" | \
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
           awk '{print 100 - $1"%"}'

UPDATE C’est bon j’ai trouvé la bonne commande pour avoir le CPU usage : CPU_USAGE=$(awk ‘{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) « % »; }’ <(grep ‘cpu ‘ /proc/stat) <(sleep 1;grep ‘cpu ‘ /proc/stat))

Je note aussi cette commande :

$ mpstat 2 1 | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }' | head -1
44%

Voici le CPU History :
Voici le Grafana (avec la mauvaise commmande):
Michel, une idée ?