web-dev-qa-db-fra.com

Obtention de la valeur de consommation quotidienne de données de vnstat dans JSON

Je souhaite récupérer l'utilisation Internet quotidienne de ma machine Ubuntu au format Json à l'aide de Vnstat . Pour récupérer l'utilisation quotidienne dans le terminal, j'utilise la commande suivante:

vnstat -d -i wlp2s0

la sortie sera:

wlp2s0  /  daily

         day         rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
               ,ۋ6�        60 KiB |      27 KiB |      87 KiB |    0.01 kbit/s
               ,ۋ6�    333.00 MiB |  170.16 MiB |  503.16 MiB |   47.71 kbit/s
               ,ۋ6�    626.23 MiB |   39.64 MiB |  665.87 MiB |   63.13 kbit/s
               ,ۋ6�    172.47 MiB |  177.32 MiB |  349.79 MiB |   33.16 kbit/s
               ,ۋ6�     11.88 MiB |    1.66 MiB |   13.54 MiB |    1.28 kbit/s
               ,ۋ6�         0 KiB |       0 KiB |       0 KiB |    0.00 kbit/s
               ,ۋ6�    380.47 MiB |   21.22 MiB |  401.69 MiB |   38.09 kbit/s
               ,ۋ6�    173.32 MiB |   14.71 MiB |  188.03 MiB |   17.83 kbit/s
               ,ۋ6�         0 KiB |       0 KiB |       0 KiB |    0.00 kbit/s
               ,ۋ6�         0 KiB |       0 KiB |       0 KiB |    0.00 kbit/s
               ,ۋ6�     17.49 MiB |    4.33 MiB |   21.82 MiB |    2.07 kbit/s
               ,ۋ6�        70 KiB |      73 KiB |     143 KiB |    0.01 kbit/s
               ,ۋ6�     15.12 MiB |    1.95 MiB |   17.07 MiB |    1.62 kbit/s
               ,ۋ6�     18.45 MiB |    5.86 MiB |   24.31 MiB |    3.55 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        27 MiB |       7 MiB |      34 MiB |

Alors, comment récupérer uniquement la valeur totale, rx et tx qui est estimated 27 MiB | 7 MiB | 34 MiB |de la sortie ci-dessus au format Json sous la forme:

{"daily_usage":{"rx":27,"tx":7,"total":34}}

En fait, j'essaie de passer ce format JSON à python script plus tard, Thaks à l'avance !!

1
Sjn73

vnstat dispose d'options pour la sortie dans des formats lisibles par machine. De man vnstat :

_--json mode
  Show database content for selected interface or  all  interfaces
  in  json format. All traffic values in the output are in KiB. An
  optional mode parameter can be used for limiting the  output  to
  only  selected  information.   Everything  is  shown by default.
  Setting mode to 'h' will output only hours, 'd' days, 'm' months
  and 't' the top 10.

--xml mode
  Show database content for selected interface or  all  interfaces
  in  xml  format. All traffic values in the output are in KiB. An
  optional mode parameter can be used for limiting the  output  to
  only  selected  information.   Everything  is  shown by default.
  Setting mode to 'h' will output only hours, 'd' days, 'm' months
  and 't' the top 10.
_

Il suffit de faire _vnstat -i wlp2s0 --json d_ et de l’analyser dans Python pour obtenir le champ dont vous avez besoin. _-d_ n'est pas nécessaire et sera ignoré, car l'option _--json_ prend l'argument mode.

2
muru

@ Sjn73, @muru a donc la bonne idée.

La seule chose que je voulais (mais je ne peux pas encore) commenter est que vous pouvez simplement écrire: vnstat --json d

Cela fera basculer la mode mentionnée dans la documentation sur quotidien uniquement. Notez qu'il s'agit d'une entrée de l'indicateur --json, différente de l'indicateur -d.

Everything  is  shown by default.
  Setting mode to 'h' will output only hours, 'd' days, 'm' months
  and 't' the top 10.
1
Andrew Collett
#!/bin/bash

#get the last line
IN=$(vnstat -d | (tail -n1))
#remove estimated
INR=${IN//estimated}
#convert to array
arrOUT=(${INR//|/ })

#format the output
OUTPUT="{\"daily_usage\":{\"rx\": ${arrOUT[0]}, \"tx\": ${arrOUT[2]}, \"total\": ${arrOUT[4]} }"
OUTPUT2="{\"daily_usage\":{\"rx\": ${arrOUT[0]} ${arrOUT[1]}, \"tx\": ${arrOUT[2]} ${arrOUT[3]}, \"total\": ${arrOUT[4]} ${arrOUT[5]} }"

#pick one
echo $OUTPUT
echo $OUTPUT2
  • enregistrer dans your_script.sh
  • changer les permissions sur le fichier pour le rendre exécutable
  • exécuter en tant que bash your_script.sh
0
nammalvar 2.0