Получение значения ежедневного потребления данных из vnstat в JSON
Я хочу получать информацию о ежедневном использовании Интернета с моего компьютера с Ubuntu в формате Json с помощью Vnstat. Для получения ежедневного использования в терминале я использую следующую команду:
vnstat -d -i wlp2s0
вывод будет:
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 |
Итак, как получить только общее, rx и tx значение, которое estimated 27 MiB | 7 MiB | 34 MiB |
из вышеприведенного вывода в Json
Формат в форме:
{"daily_usage":{"rx":27,"tx":7,"total":34}}
На самом деле я пытаюсь передать этот формат JSON Python-скрипт позже Такса заранее!
3 ответа
vnstat
имеет параметры для вывода в машиночитаемых форматах. От 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.
Просто делать vnstat -i wlp2s0 --json d
и разобрать его в Python, чтобы получить любое поле, которое вам нужно. -d
не требуется и будет игнорироваться, так как --json
вариант принимает mode
аргумент.
@Sjn73, поэтому @muru имеет правильную идею.
Единственное, что я хотел (но пока не могу) прокомментировать, это то, что вы можете просто написать: vnstat --json d
Это переключит mode
упоминается в документации только ежедневно. Обратите внимание, что это вход в --json
флаг, не то же самое, что -d
флаг.
Everything is shown by default.
Setting mode to 'h' will output only hours, 'd' days, 'm' months
and 't' the top 10.
#!/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
- сохранить в
your_script.sh
- изменить разрешения для файла, чтобы сделать его исполняемым
- беги как
bash your_script.sh