Je viens de faire un nouveau programme en Python afin de mettre les données de ENEDIS sur MariaDB & Python. Pour avoir les données de ENEDIS il faut aller sur https://mon-compte-particulier.enedis.fr/home-connectee/ et se faire un compte. Puis relier ce compte à la facture EDF … Je vais pas vous mentir c’est un peu de parcours du combattant. J’ai du faire appel à plusieurs fois au support afin que le lien puisse se faire. Misère.
Pour utiliser le script il faut:
Slack permet le téléchargement d’un fichier CSV ( access_logs.csv ), dont les données sont les suivantes :
Petit rappel sur l’ajout d’une database et d’un utilisateur :
$ sudo mysql -u root
MariaDB [(none)]> create database SLACK;
MariaDB [(none)]> CREATE USER 'slack'@'localhost' IDENTIFIED BY 'slack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON SLACK.* TO 'slack'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \quit
Bye
Petit rappel aussi en python pour télécharger une classe non disponible :
La première étape est le téléchargement du soft sur : https://www.citrix.com/downloads/workspace-app/linux/workspace-app-for-linux-latest.html .
Le lien direct : https://downloads.citrix.com/16914/icaclient_19.12.0.19_amd64.deb
$ sudo dpkg -i icaclient_19.12.0.19_amd64.deb
Sélection du paquet icaclient précédemment désélectionné.
(Lecture de la base de données... 370627 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de icaclient_19.12.0.19_amd64.deb ...
Dépaquetage de icaclient (19.12.0.19) ...
Paramétrage de icaclient (19.12.0.19) ...
Traitement des actions différées (« triggers ») pour gnome-menus (3.13.3-11ubuntu1.1) ...
Traitement des actions différées (« triggers ») pour bamfdaemon (0.5.3+18.04.20180207.2-0ubuntu1) ...
Rebuilding /usr/share/applications/bamf-2.index...
Traitement des actions différées (« triggers ») pour desktop-file-utils (0.23-1ubuntu3.18.04.2) ...
Traitement des actions différées (« triggers ») pour mime-support (3.60ubuntu1) ...
$ sudo cp /usr/share/ca-certificates/mozilla/*.crt /opt/Citrix/ICAClient/keystore/cacerts/
Ensuite il faut faire la congiguration via :
Ma version de Ubuntu :
$ cat /etc/*release | grep "DISTRIB"
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
Je vais donc faire un petit test, d’abord l’installation de de virtualbox 5 à la palce de virtualbox 6.1 . Et ensuite l’installation de vagrant :
$ sudo apt-get install virtualbox
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
gconf-service gconf-service-backend gconf2 gconf2-common libappindicator1 libcurl3-nss libdbusmenu-gtk4 libfwup1 libgconf-2-4 libindicator7
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
Les paquets supplémentaires suivants seront installés :
libgsoap-2.8.60 libvncserver1 virtualbox-dkms virtualbox-qt
Paquets suggérés :
vde2 virtualbox-guest-additions-iso
Les paquets suivants seront ENLEVÉS :
virtualbox-6.1
Les NOUVEAUX paquets suivants seront installés :
libgsoap-2.8.60 libvncserver1 virtualbox virtualbox-dkms virtualbox-qt
0 mis à jour, 5 nouvellement installés, 1 à enlever et 0 non mis à jour.
...
$ sudo apt-get install vagrant
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
gconf-service gconf-service-backend gconf2 gconf2-common libappindicator1 libcurl3-nss libdbusmenu-gtk4 libfwup1 libgconf-2-4 libindicator7
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
Les paquets supplémentaires suivants seront installés :
augeas-lenses bsdtar cpu-checker cryptsetup cryptsetup-bin db-util db5.3-util dmeventd extlinux hfsplus ipxe-qemu ipxe-qemu-256k-compat-efi-roms keyutils
ldmtool libafflib0v5 libarchive-tools libaugeas0 libbfio1 libcacard0 libconfig9 libdevmapper-event1.02.1 libewf2 libfdt1 libguestfs-hfsplus libguestfs-perl
libguestfs-reiserfs libguestfs-tools libguestfs-xfs libguestfs0 libhfsp0 libhivex0 libintl-perl libintl-xs-perl libiscsi7 libldm-1.0-0 liblvm2app2.2
liblvm2cmd2.02 libnfsidmap2 librbd1 librdmacm1 libsodium-dev libspice-server1 libstring-shellquote-perl libsys-virt-perl libtirpc1 libtsk13
libusbredirparser1 libvirt0 libwin-hivex-perl libxen-4.9 libxenstore3.0 libxml-xpath-perl lsscsi lvm2 lzop mdadm msr-tools mtools nfs-common
nfs-kernel-server osinfo-db qemu-block-extra qemu-system-common qemu-system-x86 qemu-utils reiserfsprogs rpcbind ruby-bcrypt-pbkdf ruby-blankslate
ruby-builder ruby-childprocess ruby-domain-name ruby-erubis ruby-excon ruby-ffi ruby-fog-core ruby-fog-json ruby-fog-libvirt ruby-fog-xml ruby-formatador
ruby-http-cookie ruby-i18n ruby-json ruby-libvirt ruby-listen ruby-log4r ruby-mime-types ruby-mime-types-data ruby-multi-json ruby-net-scp ruby-net-sftp
ruby-net-ssh ruby-netrc ruby-nokogiri ruby-oj ruby-pkg-config ruby-rb-inotify ruby-rbnacl ruby-rest-client ruby-sqlite3 ruby-unf ruby-unf-ext scrub seabios
sgabios sharutils sleuthkit supermin syslinux syslinux-common vagrant-libvirt xfsprogs zerofree
Paquets suggérés :
augeas-doc augeas-tools libguestfs-gfs2 libguestfs-jfs libguestfs-nilfs libguestfs-rescue libguestfs-rsync libguestfs-zfs thin-provisioning-tools
dracut-core floppyd open-iscsi watchdog vde2 ovmf ruby-builder-doc ruby-activesupport sharutils-doc autopsy mac-robber xfsdump quota
Les NOUVEAUX paquets suivants seront installés :
augeas-lenses bsdtar cpu-checker cryptsetup cryptsetup-bin db-util db5.3-util dmeventd extlinux hfsplus ipxe-qemu ipxe-qemu-256k-compat-efi-roms keyutils
ldmtool libafflib0v5 libarchive-tools libaugeas0 libbfio1 libcacard0 libconfig9 libdevmapper-event1.02.1 libewf2 libfdt1 libguestfs-hfsplus libguestfs-perl
libguestfs-reiserfs libguestfs-tools libguestfs-xfs libguestfs0 libhfsp0 libhivex0 libintl-perl libintl-xs-perl libiscsi7 libldm-1.0-0 liblvm2app2.2
liblvm2cmd2.02 libnfsidmap2 librbd1 librdmacm1 libsodium-dev libspice-server1 libstring-shellquote-perl libsys-virt-perl libtirpc1 libtsk13
libusbredirparser1 libvirt0 libwin-hivex-perl libxen-4.9 libxenstore3.0 libxml-xpath-perl lsscsi lvm2 lzop mdadm msr-tools mtools nfs-common
nfs-kernel-server osinfo-db qemu-block-extra qemu-system-common qemu-system-x86 qemu-utils reiserfsprogs rpcbind ruby-bcrypt-pbkdf ruby-blankslate
ruby-builder ruby-childprocess ruby-domain-name ruby-erubis ruby-excon ruby-ffi ruby-fog-core ruby-fog-json ruby-fog-libvirt ruby-fog-xml ruby-formatador
ruby-http-cookie ruby-i18n ruby-json ruby-libvirt ruby-listen ruby-log4r ruby-mime-types ruby-mime-types-data ruby-multi-json ruby-net-scp ruby-net-sftp
ruby-net-ssh ruby-netrc ruby-nokogiri ruby-oj ruby-pkg-config ruby-rb-inotify ruby-rbnacl ruby-rest-client ruby-sqlite3 ruby-unf ruby-unf-ext scrub seabios
sgabios sharutils sleuthkit supermin syslinux syslinux-common vagrant vagrant-libvirt xfsprogs zerofree
0 mis à jour, 114 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 30,5 Mo dans les archives.
Ensuite téléchargement de la VM our Valgrant : https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
Les prérequis :
Voici donc ce que j’ai fait pour avoir mes données sous Grafana.
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.
Je concatène tous les fichiers CSV dans un seul fichier en supprimant les entetes :
J’ai fait une version 2 qui permet de voir l’intéraction avec les utilisateurs : les sources sont disponibles ici : https://github.com/farias06/Grafana/blob/master/Twitter_CSV_insert_v2.py )
import csv
from datetime import datetime
import mysql.connector
import re
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("CREATE TABLE TWITTER_USER (USER varchar(20),IDENTIFIANT varchar(30), DATE datetime, PRIMARY KEY (USER,IDENTIFIANT));");
cursor.execute("DELETE FROM TWITTER_USER")
cursor.execute("DELETE FROM TWITTER");
cnx.commit();
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")
User = re.findall(r'(?<=\W)[@]\S*', MyTexte)
for MyUser in User:
try :
cursor.execute("INSERT INTO TWITTER_USER (IDENTIFIANT,USER,DATE) VALUES ('"+row[0]+"','"+MyUser+"','"+MyDate+"');");
except mysql.connector.Error as err:
print("Something went wrong: {}".format(err))
if err.errno == errorcode.ER_BAD_TABLE_ERROR:
print("Creating table TWITTER_USER")
else:
None
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();
Il faut donc faire la requête suivante :
Le projet est disponible ici : https://github.com/skilion/onedrive .
Voici les phases de l’installation :
$ sudo apt install libcurl4-openssl-dev
...
$ sudo apt install libsqlite3-dev
...
$ sudo snap install --classic dmd && sudo snap install --classic dub
...
$ git clone https://github.com/skilion/onedrive.git
...
$ cd onedrive/
...
$ make
echo v1.1.3 >version
dmd -g -ofonedrive -O -L-lcurl -L-lsqlite3 -L-ldl -J. src/config.d src/itemdb.d src/log.d src/main.d src/monitor.d src/onedrive.d src/qxor.d src/selective.d src/sqlite.d src/sync.d src/upload.d src/util.d
src/sqlite.d(142): Deprecation: foreach: loop index implicitly converted from size_t to int
sed "s|@PREFIX@|/usr/local|g" onedrive.service.in > onedrive.service
$ sudo make install
...
$ mkdir -p ~/.config/onedrive
...
$ cp ./config ~/.config/onedrive/config
...
Ensuite il suffit de lancer onedrive :
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 :
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))
Voici donc le script que j’ai fait :
#!/bin/bash
#
# MariaDB [mysql]> create database CPU;
# Query OK, 1 row affected (0.00 sec)
# MariaDB [(none)]> CREATE USER 'arias'@'localhost' IDENTIFIED BY 'arias';
# Query OK, 0 rows affected (0.00 sec)
# MariaDB [(none)]> GRANT USAGE ON *.* TO 'arias'@'localhost' IDENTIFIED BY 'arias';
# Query OK, 0 rows affected (0.00 sec)
# MariaDB [(none)]> GRANT ALL privileges ON CPU.* TO 'arias'@'localhost';
# Query OK, 0 rows affected (0.00 sec)
# MariaDB [(none)]> FLUSH PRIVILEGES;
# Query OK, 0 rows affected (0.00 sec)
#
#
#mysql -u root -e "CREATE DATABASE CPU;"
#mysql -u root -e "USE CPU; CREATE TABLE information (date datetime, cpu float, fanId int, rawFanDuty int, fanDuty float, remoteTemp int, localTemp int);"
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))
DATE=$(date "+%Y-%m-%d %H:%M:%S")
CPU_USAGE_2=$(echo $CPU_USAGE | sed 's/%//g' )
/usr/bin/tuxedofancontrol --show > /tmp/tuxedofancontrol.out
FANID=$(cat /tmp/tuxedofancontrol.out | grep "fanId" | awk '{print $2}' | sed 's/,//g')
RAWFANDUTY=$(cat /tmp/tuxedofancontrol.out | grep "rawFanDuty" | awk '{print $2}' | sed 's/,//g' )
FANDUTY=$(cat /tmp/tuxedofancontrol.out | grep "fanDuty" | awk '{print $2}' | sed 's/,//g')
REMOTETEMP=$(cat /tmp/tuxedofancontrol.out | grep "remoteTemp:" | awk '{print $2}' | sed 's/,//g')
LOCALTEMP=$(cat /tmp/tuxedofancontrol.out | grep "localTemp:" | awk '{print $2}' | sed 's/,//g' )
if [ ! -z $FANID ]
then
SQL="USE CPU; INSERT INTO information (date, cpu, fanId, rawFanDuty, fanDuty, remoteTemp, localTemp) VALUES ('$DATE',$CPU_USAGE_2,$FANID,$RAWFANDUTY,$FANDUTY,$REMOTETEMP,$LOCALTEMP);"
else
SQL="USE CPU; INSERT INTO information (date, cpu) VALUES ('$DATE',$CPU_USAGE_2);"
fi
echo $SQL > /tmp/lastsql.out
mysql -u root -e "$SQL"
C’est assez simple, je prends la date et l’utilisation du CPU. Et aussi je note toutes les informations de tuxedofancontrol. J’ai mis le script toutes les 2 minutes dans ma crontab, ensuite je ferai un script pour Grafana.