obtendo o valor de consumo de dados diário do vnstat no JSON

1

Eu quero recuperar o uso da internet diariamente de minha máquina Ubuntu em formato JSON usando vnstat . Para buscar o uso diário no terminal eu uso o seguinte comando:

vnstat -d -i wlp2s0

a saída será:

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 |

Então, como recuperar Apenas o valor total, rx e tx que é estimated 27 MiB | 7 MiB | 34 MiB | da saída acima no formato Json na forma:

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

Na verdade, estou tentando passar esse formato json para o script python mais tarde Thaks adiantado !!

    
por Sjn73 24.10.2017 / 12:29

3 respostas

2

vnstat tem opções para imprimir em formatos legíveis por máquina. 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.

Basta fazer vnstat -i wlp2s0 --json d e analisá-lo em Python para obter o campo de que você precisa. O -d não é necessário e será ignorado, pois a opção --json aceita o argumento mode .

    
por muru 24.10.2017 / 18:06
1

@ Sjn73, então, @muru tem a ideia certa.

A única coisa que eu queria (mas ainda não posso) comentar é que você pode simplesmente escrever: vnstat --json d

Isso mudará o mode mencionado na documentação para apenas diariamente. Observe que esta é uma entrada para o sinalizador --json , não é a mesma coisa que o sinalizador -d .

Everything  is  shown by default.
  Setting mode to 'h' will output only hours, 'd' days, 'm' months
  and 't' the top 10.
    
por Andrew Collett 18.03.2018 / 22:19
0
#!/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
  • salve em your_script.sh
  • altere as permissões no arquivo para torná-lo executável
  • executado como bash your_script.sh
por nammalvar 2.0 24.10.2017 / 17:27