luci-app-nlbwmon: convert to client side JS
[project/luci.git] / applications / luci-app-nlbwmon / root / usr / libexec / nlbwmon-action
1 #!/bin/sh
2
3 case "$1" in
4
5 backup)
6 dbdir=$(uci -q get nlbwmon.@nlbwmon[0].database_directory)
7
8 if [ ! -d "${dbdir:-/var/lib/nlbwmon}" ]; then
9 echo "Unable to locate database directory" >&2
10 exit 1
11 fi
12
13 exec /bin/tar -C "${dbdir:-/var/lib/nlbwmon}" -c -z . -f -
14 ;;
15
16 commit)
17 exec /usr/sbin/nlbw -c commit
18 ;;
19
20 download)
21 shift
22
23 type=json
24 delim=,
25 period=
26 group_by=
27 order_by=
28
29 while [ -n "$1" ]; do
30 case "$1" in
31 -f)
32 case "$2" in
33 csv|json) type=$2 ;;
34 *) echo "Invalid data format" >&2; exit 1 ;;
35 esac
36 shift
37 ;;
38 -s)
39 case "$2" in
40 ?) delim=$2 ;;
41 *) echo "Invalid delimitter" >&2; exit 1 ;;
42 esac
43 shift
44 ;;
45 -t)
46 case "$2" in
47 [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]) period=$2 ;;
48 *) echo "Invalid period" >&2; exit 1 ;;
49 esac
50 shift
51 ;;
52 -g|-o)
53 case "$1:$2" in
54 -g:?*) group_by=$2 ;;
55 -o:?*) order_by=$2 ;;
56 *) echo "Argument required for $1" >&2; exit 1 ;;
57 esac
58 shift
59 ;;
60 *)
61 echo "Unknown option $1" >&2
62 exit 1
63 ;;
64 esac
65 shift
66 done
67
68 exec /usr/sbin/nlbw -c $type -s$delim \
69 ${period:+-t $period} \
70 ${group_by:+-g "$group_by"} \
71 ${order_by:+-o "$order_by"}
72 ;;
73
74 periods)
75 for date in $(/usr/sbin/nlbw -c list); do
76 case "$date" in
77 [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9])
78 res="${res:+$res, }\"$date\""
79 ;;
80 esac
81 done
82
83 printf '{ "periods": [ %s ] }' "$res"
84 ;;
85
86 restore)
87 if [ ! -f /tmp/nlbw-restore.tar.gz ]; then
88 echo "Unable to locate archive to restore" >&2
89 exit 1
90 fi
91
92 dbdir=$(uci -q get nlbwmon.@nlbwmon[0].database_directory)
93 files=$(/bin/tar -tzf /tmp/nlbw-restore.tar.gz | grep -E '^(\./)?[0-9]{8}\.db(\.gz)?$' | tr '\n' ' ')
94
95 if [ -z "$files" ]; then
96 echo "Invalid or empty backup archive" >&2
97 exit 1
98 fi
99
100 /etc/init.d/nlbwmon stop
101 /bin/mkdir -p "${dbdir:-/var/lib/nlbwmon}"
102
103 for file in $(/bin/tar -C "${dbdir:-/var/lib/nlbwmon}" -vxzf /tmp/nlbw-restore.tar.gz $files); do
104 res="${res:+$res, }\"${file#./}\""
105 done
106
107 /bin/rm -f /tmp/nlbw-restore.tar.gz
108 /etc/init.d/nlbwmon start
109
110 printf '{ "restored": [ %s ] }' "$res"
111 ;;
112
113 *)
114 echo "Usage: $0 {commit|download|periods|restore}" >&2
115 exit 1
116 ;;
117 esac