rev |
line source |
pankso@2
|
1 #!/bin/sh
|
pankso@2
|
2 #
|
al@419
|
3 # Main CGI interface for TazPanel. In on word: KISS. Use the main CSS form
|
paul@52
|
4 # command so we are faster and do not load unneeded functions. If necessary
|
pankso@14
|
5 # you can use the lib/ dir to handle external resources.
|
pankso@2
|
6 #
|
al@419
|
7 # Copyright (C) 2011-2015 SliTaz GNU/Linux - BSD License
|
pankso@42
|
8 #
|
pankso@2
|
9
|
al@419
|
10
|
pankso@14
|
11 # Common functions from libtazpanel
|
al@419
|
12
|
pankso@14
|
13 . lib/libtazpanel
|
pankso@14
|
14 get_config
|
pankso@2
|
15
|
al@292
|
16 TITLE="TazPanel"
|
al@292
|
17
|
al@419
|
18
|
al@419
|
19
|
paul@127
|
20 # Check whether a configuration file has been modified after installation
|
al@419
|
21
|
al@437
|
22 file_is_modified() {
|
pascal@91
|
23 grep -l " $1$" $INSTALLED/*/md5sum | while read file; do
|
al@292
|
24
|
al@419
|
25 # Found, but can we do diff?
|
pascal@91
|
26 [ "$(grep -h " $1$" $file)" != "$(md5sum $1)" ] || break
|
al@419
|
27 orig=$(dirname $file)/volatile.cpio.gz
|
al@419
|
28 zcat $orig 2>/dev/null | cpio -t 2>/dev/null | grep -q "^${1#/}$" || break
|
pascal@91
|
29
|
pascal@91
|
30 case "$2" in
|
al@419
|
31 diff)
|
al@419
|
32 tmp=$(mktemp -d)
|
al@419
|
33 ( cd $tmp; zcat $orig | cpio -id ${1#/} )
|
al@419
|
34 diff -abu $tmp$1 $1 | sed "s|$tmp||"
|
al@419
|
35 rm -rf $tmp;;
|
al@419
|
36 button)
|
al@437
|
37 echo -n '<button name="action" value="diff" data-icon="diff">'$(_ 'Differences')'</button>';;
|
pascal@91
|
38 esac
|
pascal@93
|
39 break
|
pascal@91
|
40 done
|
pascal@91
|
41 }
|
al@312
|
42
|
al@312
|
43
|
al@419
|
44
|
al@303
|
45 # OK status in table
|
al@419
|
46
|
al@303
|
47 ok_status_t() {
|
al@419
|
48 echo '<td><span class="diff-add" data-img="ok"></span></td></tr>'
|
al@303
|
49 }
|
al@303
|
50
|
al@303
|
51
|
al@419
|
52
|
al@437
|
53 # Terminal prompt
|
al@437
|
54
|
al@437
|
55 term_prompt() {
|
al@437
|
56 if [ "$user" == 'root' ]; then
|
al@437
|
57 local color1='color31' sign='#'
|
al@437
|
58 else
|
al@437
|
59 local color1='color32' sign='$'
|
al@437
|
60 fi
|
al@437
|
61 echo -n "<span class='$color1'>$user@$(hostname)</span>:<span class='color33'>"
|
al@437
|
62 pwd | sed "s|^$HOME|~|" | tr -d '\n'; echo -n "</span>$sign "
|
al@437
|
63 }
|
al@437
|
64
|
al@437
|
65
|
al@437
|
66
|
pankso@2
|
67 #
|
pankso@49
|
68 # Things to do before displaying the page
|
pankso@49
|
69 #
|
pankso@49
|
70
|
pascal@81
|
71 [ -n "$(GET panel_pass)" ] &&
|
pascal@81
|
72 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF
|
pankso@49
|
73
|
al@419
|
74
|
al@419
|
75
|
al@419
|
76
|
al@419
|
77
|
pankso@49
|
78 #
|
pankso@2
|
79 # Commands
|
pankso@2
|
80 #
|
pankso@2
|
81
|
pascal@81
|
82 case " $(GET) " in
|
al@419
|
83
|
al@419
|
84
|
pascal@364
|
85 *\ exec\ *)
|
al@419
|
86 # Execute command and display its result in a terminal-like window
|
al@419
|
87
|
al@419
|
88 header; TITLE=$(gettext 'TazPanel - exec'); xhtml_header
|
al@419
|
89
|
pascal@364
|
90 exec="$(GET exec)"
|
al@419
|
91 font="${TERM_FONT:-monospace}"
|
al@419
|
92 palette=$(echo $TERM_PALETTE | tr A-Z a-z)
|
al@419
|
93
|
al@419
|
94 cat <<EOT
|
al@419
|
95 <section>
|
al@419
|
96 <header>
|
al@419
|
97 $exec
|
al@419
|
98 $(back_button "$(GET back)" "$(GET back_caption)" "$(GET back_icon)")
|
al@419
|
99 </header>
|
al@419
|
100 <div class="term_">
|
al@419
|
101 <pre class="term $palette" style="font-family: '$font'">$($exec 2>&1 | htmlize | filter_taztools_msgs)</pre>
|
al@419
|
102 </div>
|
al@419
|
103 </section>
|
pascal@364
|
104 EOT
|
pascal@364
|
105 ;;
|
al@419
|
106
|
al@419
|
107
|
pascal@81
|
108 *\ file\ *)
|
pankso@56
|
109 #
|
pascal@91
|
110 # Handle files
|
pankso@56
|
111 #
|
al@419
|
112 header
|
pascal@81
|
113 file="$(GET file)"
|
al@419
|
114 action="$(POST action)"; [ -z "$action" ] && action="$(GET action)" # receive 'action' both on POST or GET
|
al@419
|
115
|
pankso@161
|
116 case $file in
|
pankso@161
|
117 *.html)
|
al@419
|
118 cat $file; exit 0 ;;
|
pankso@161
|
119 *)
|
al@419
|
120 TITLE=$(gettext 'TazPanel - File'); xhtml_header ;;
|
pankso@161
|
121 esac
|
al@303
|
122
|
al@419
|
123 case "$action" in
|
al@419
|
124 edit)
|
al@419
|
125 cat <<EOT
|
al@419
|
126 <section>
|
al@419
|
127 <header>
|
al@419
|
128 <span data-icon="edit">$file</span>
|
al@419
|
129 <form id="editform" method="post" action="?file=$file" class="nogap">
|
al@419
|
130 <button data-icon="save">$(gettext 'Save')</button>
|
al@419
|
131 <button name="action" value="diff" data-icon="diff">$(gettext 'Differences')</button>
|
al@419
|
132 </form>
|
al@419
|
133 </header>
|
al@419
|
134 <textarea form="editform" name="content" class="wide" rows="30" autofocus>$(cat $file | htmlize)</textarea>
|
al@419
|
135 </section>
|
pascal@90
|
136 EOT
|
naitsirhc@267
|
137 #The space before textarea gets muddled when the form is submitted.
|
naitsirhc@267
|
138 #It prevents anything else from getting messed up
|
al@419
|
139 ;;
|
al@419
|
140
|
al@419
|
141 setvar)
|
pascal@364
|
142 data="$(. $(GET file) ;eval echo \$$(GET var))"
|
pascal@364
|
143 cat <<EOT
|
al@419
|
144 <section>
|
al@419
|
145 <header>$(GET var)</header>
|
al@419
|
146 <form method="post" action="?file=$file" class="nogap">
|
al@419
|
147 <input type="hidden" name="var" value="$(GET var)">
|
al@419
|
148 <input type="text" name="content" value="${data:-$(GET default)}">
|
al@419
|
149 <button type="submit" data-icon="save">$(gettext 'Save')</button>
|
al@419
|
150 </form>
|
al@419
|
151 </section>
|
pascal@364
|
152 EOT
|
al@419
|
153 ;;
|
al@419
|
154
|
al@419
|
155 diff)
|
al@419
|
156 cat <<EOT
|
al@419
|
157 <section>
|
al@419
|
158 <pre id="diff">$(file_is_modified $file diff | syntax_highlighter diff)</pre>
|
al@419
|
159 </section>
|
al@419
|
160 EOT
|
al@419
|
161 ;;
|
al@419
|
162
|
al@419
|
163 *)
|
al@340
|
164 R=$(echo -en '\r')
|
pascal@364
|
165 if [ -n "$(POST content)" ]; then
|
pascal@364
|
166 if [ -n "$(POST var)" ]; then
|
pascal@364
|
167 sed -i "s|^\\($(POST var)=\\).*|\1\"$(POST content)\"|" $file
|
pascal@364
|
168 else
|
pascal@364
|
169 sed "s/$R /\n/g;s/$R%0//g" > $file <<EOT
|
pascal@90
|
170 $(POST content)
|
pascal@90
|
171 EOT
|
pascal@364
|
172 fi
|
pascal@364
|
173 fi
|
al@419
|
174
|
pascal@90
|
175 cat <<EOT
|
al@419
|
176 <section>
|
al@439
|
177 <header>
|
al@439
|
178 <span data-icon="text">$file</span>
|
pascal@433
|
179 EOT
|
pascal@433
|
180 [ -w "$file" ] && cat <<EOT
|
al@426
|
181 <form>
|
al@419
|
182 <input type="hidden" name="file" value="$file"/>
|
al@419
|
183 <button name="action" value="edit" data-icon="edit">$(gettext 'Edit')</button><!--
|
al@419
|
184 -->$(file_is_modified $file button)
|
al@419
|
185 </form>
|
pascal@433
|
186 EOT
|
pascal@433
|
187 cat <<EOT
|
al@439
|
188 </header>
|
al@439
|
189
|
al@419
|
190 <div>
|
al@419
|
191 <pre>
|
al@303
|
192 EOT
|
pascal@90
|
193 # Handle file type by extension as a Web Server does it.
|
pascal@90
|
194 case "$file" in
|
pascal@90
|
195 *.conf|*.lst)
|
pascal@90
|
196 syntax_highlighter conf ;;
|
pascal@90
|
197 *.sh|*.cgi)
|
pascal@90
|
198 syntax_highlighter sh ;;
|
al@419
|
199 *Xorg.0.log)
|
al@419
|
200 syntax_highlighter xlog ;;
|
al@419
|
201 *dmesg.log)
|
al@419
|
202 syntax_highlighter kernel ;;
|
pascal@90
|
203 *)
|
al@303
|
204 cat | htmlize ;;
|
pascal@90
|
205 esac < $file
|
al@419
|
206 cat <<EOT
|
al@419
|
207 </pre>
|
al@419
|
208 </div>
|
al@419
|
209 </section>
|
al@419
|
210 EOT
|
al@419
|
211 esac
|
al@419
|
212 ;;
|
al@419
|
213
|
al@303
|
214
|
al@312
|
215
|
pankso@191
|
216 *\ terminal\ *|*\ cmd\ *)
|
al@419
|
217 # Cmdline terminal
|
al@419
|
218
|
al@437
|
219 header; TITLE=$(gettext 'TazPanel - Terminal'); xhtml_header
|
al@419
|
220
|
al@437
|
221 user="$REMOTE_USER"
|
al@437
|
222 HOME="$(awk -F: -vu=$user '$1==u{print $6}' /etc/passwd)"
|
al@437
|
223 historyfile="$HOME/.ash_history"
|
al@437
|
224
|
pankso@191
|
225 cmd=$(GET cmd)
|
al@437
|
226 path="$(GET path)"; path="${path:-/tmp}"; cd "$path"
|
al@419
|
227
|
al@419
|
228 font="${TERM_FONT:-monospace}"
|
al@419
|
229 palette=$(echo $TERM_PALETTE | tr A-Z a-z)
|
al@419
|
230
|
al@419
|
231 [ -n "$cmd" -a "$cmd" != "$(tail -n1 $historyfile)" ] && echo "$cmd" >> $historyfile
|
al@419
|
232
|
al@419
|
233
|
al@419
|
234 # Terminal history
|
al@419
|
235
|
al@419
|
236 if [ "$cmd" == 'history' ]; then
|
al@419
|
237 cat <<EOT
|
al@312
|
238 <section>
|
al@419
|
239 <header>
|
al@419
|
240 $(gettext 'History')
|
al@419
|
241 <form><button name="terminal" data-icon="terminal">$(gettext 'Back')</button></form>
|
al@419
|
242 </header>
|
al@419
|
243 <form>
|
al@419
|
244 <input type="hidden" name="path" value="$path"/>
|
al@419
|
245 <pre class="term $palette" style="font-family: '$font'">
|
pankso@191
|
246 EOT
|
al@419
|
247 htmlize < $historyfile | awk -vrun="$(gettext 'run')" -vpath="$path" '
|
al@419
|
248 BEGIN { num=1 }
|
al@419
|
249 {
|
al@419
|
250 printf("%3d ", num);
|
al@419
|
251 cmd = $0
|
al@419
|
252 gsub("%", "%25", cmd); gsub("+", "%2B", cmd); gsub(" ", "+", cmd);
|
al@419
|
253 gsub("\"", "%22", cmd); gsub("!", "%21", cmd); gsub("'\''", "%27", cmd);
|
al@419
|
254 printf("<a data-icon=\"run\" href=\"?cmd=%s&path=%s\">%s</a> ", cmd, path, run);
|
al@419
|
255 printf("<input type=\"checkbox\" name=\"rm\" value=\"%d\" id=\"hist%d\">", num, num);
|
al@419
|
256 printf("<label for=\"hist%d\">%s</label>\n", num, $0);
|
al@419
|
257 num++
|
al@419
|
258 }'
|
al@419
|
259 cat <<EOT
|
al@419
|
260 </pre>
|
al@419
|
261 <footer>
|
al@419
|
262 <button name="rmhistory" data-icon="remove">$(gettext 'Clear')</button>
|
al@419
|
263 </footer>
|
al@419
|
264 </form>
|
al@419
|
265 </section>
|
al@419
|
266 EOT
|
al@419
|
267 xhtml_footer
|
al@419
|
268 exit 0
|
al@419
|
269 fi
|
al@419
|
270
|
al@419
|
271
|
al@419
|
272 # Terminal window
|
al@419
|
273
|
al@419
|
274 cat <<EOT
|
al@419
|
275 <span id="num_hist"></span>
|
al@419
|
276 <section>
|
al@419
|
277 <pre class="term $palette" style="font-family: '$font'" onclick="document.getElementById('typeField').focus()">
|
al@419
|
278 EOT
|
al@419
|
279 if [ -n "$cmd" ]; then
|
al@437
|
280 term_prompt
|
al@419
|
281 echo "$cmd" | htmlize
|
al@419
|
282 fi
|
al@419
|
283
|
al@419
|
284 case "$cmd" in
|
pankso@191
|
285 usage|help)
|
al@419
|
286 gettext 'Small non-interactive terminal emulator.'; echo
|
al@419
|
287 gettext 'Run any command at your own risk, avoid interactive commands (nano, mc, ...)'; echo
|
al@419
|
288 ;;
|
pankso@191
|
289 wget*)
|
pankso@191
|
290 dl=/var/cache/downloads
|
pankso@191
|
291 [ ! -d "$dl" ] && mkdir -p $dl
|
al@419
|
292 eval_gettext 'Downloading to: $dl'; echo
|
al@419
|
293 cd $dl; $cmd 2>&1 ;;
|
al@419
|
294 cd|cd\ *)
|
al@437
|
295 path="${cmd#cd}"; path="${path:-$HOME}";
|
al@437
|
296 path="$(realpath $path)"; cd "$path" ;;
|
al@419
|
297 ls|ls\ *)
|
al@419
|
298 $cmd -w80 --color=always 2>&1 | filter_taztools_msgs ;;
|
al@419
|
299 cat)
|
pankso@194
|
300 # Cmd must be used with an arg.
|
al@419
|
301 eval_gettext '$cmd needs an argument' ;;
|
al@419
|
302 mc|nano)
|
al@419
|
303 # List of restricted (interactive) commands
|
al@419
|
304 eval_gettext "Please, don't run interactive command \"$cmd\""; echo; echo ;;
|
pankso@191
|
305 *)
|
al@419
|
306 unset HTTP_REFERER # for fooling /lib/libtaz.sh formatting utils (<hr> in the terminal is so-so)
|
al@419
|
307 export DISPLAY=:0.0 # for run X applications
|
al@419
|
308 /bin/sh -c "$cmd" 2>&1 | htmlize | filter_taztools_msgs
|
al@419
|
309 ;;
|
pankso@191
|
310 esac
|
al@419
|
311
|
al@419
|
312 cat <<EOT
|
al@419
|
313 <form id="term">
|
al@437
|
314 <div class="cmdline" id="cmdline"><span id="prompt">$(term_prompt)</span><span id="typeField"> </span></div>
|
al@437
|
315 <input type="hidden" name="path" value="$(pwd)"/>
|
al@419
|
316 <input type="hidden" name="cmd" id="cmd"/>
|
al@419
|
317 </form>
|
al@419
|
318 </pre>
|
al@419
|
319 </section>
|
al@419
|
320
|
al@419
|
321 <form>
|
al@419
|
322 <button name="termsettings" data-icon="settings">$(gettext 'Settings')</button>
|
al@419
|
323 <button name="cmd" value="history" data-icon="history">$(gettext 'History')</button>
|
al@419
|
324 </form>
|
al@419
|
325
|
al@419
|
326 <script type="text/javascript">
|
al@419
|
327 with (document.getElementById('typeField')) {
|
al@419
|
328 contentEditable=true;
|
al@419
|
329 focus();
|
al@419
|
330 }
|
al@419
|
331 document.onkeydown=keydownHandler;
|
al@419
|
332 EOT
|
al@419
|
333
|
al@419
|
334 # Export history as array.
|
al@419
|
335 # Escape "all \"quotes\" in quotes", and all '\'
|
al@419
|
336 # (because \u, \x, \c has special meaning and can produce syntax error and stop js)
|
al@419
|
337 sed 's|\\|\\\\|g; s|"|\\"|g' $historyfile | awk '
|
al@419
|
338 BEGIN{ i=1; printf("ash_history=[") }
|
al@419
|
339 { printf("\"%s\",", $0); i++ }
|
al@419
|
340 END{
|
al@419
|
341 printf("\"\"];")
|
al@419
|
342 i--; printf("cur_hist=\"%d\";max_hist=\"%d\";", i, i)
|
al@419
|
343 }'
|
al@419
|
344 cat <<EOT
|
al@419
|
345 </script>
|
al@419
|
346 EOT
|
al@312
|
347 ;;
|
al@312
|
348
|
al@312
|
349
|
al@419
|
350 *\ rmhistory\ *)
|
al@419
|
351 # Manage shell commandline history
|
al@437
|
352 user="$REMOTE_USER"
|
al@437
|
353 [ -z "$HOME" ] && HOME="$(awk -F: -vu=$user '$1==u{print $6}' /etc/passwd)"
|
al@437
|
354 historyfile="$HOME/.ash_history"
|
al@419
|
355
|
al@419
|
356 # Return sed command for removing history lines ('8d12d' to remove 8 and 12 lines)
|
al@419
|
357 rms=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="rm")printf "%dd", $2}')
|
al@419
|
358
|
al@419
|
359 if [ -n "$rms" ]; then
|
al@419
|
360 # Actually remove lines
|
al@419
|
361 sed -i $rms $historyfile
|
al@419
|
362 # Redirects back to the history table
|
al@419
|
363 header "HTTP/1.1 301 Moved Permanently" "Location: ?terminal&cmd=history&path=$(GET path)"
|
al@419
|
364 exit 0
|
al@419
|
365 fi
|
al@419
|
366 ;;
|
al@419
|
367
|
al@419
|
368
|
al@419
|
369 *\ termsettings\ *)
|
al@419
|
370 # Terminal settings
|
al@419
|
371 TITLE=$(gettext 'TazPanel - Terminal'); header; xhtml_header;
|
al@419
|
372 user="$REMOTE_USER"
|
al@419
|
373 font="$(GET font)"; font="${font:-$TERM_FONT}"
|
al@419
|
374 palette="$(GET palette)"; palette="${palette:-$TERM_PALETTE}"
|
al@419
|
375 pal=$(echo $palette | tr A-Z a-z)
|
al@419
|
376
|
al@419
|
377 # Add or change settings in TazPanel config
|
al@419
|
378 if [ -z "$TERM_FONT" ]; then
|
al@419
|
379 echo -e "\n# Terminal font family\nTERM_FONT=\"$font\"" >> $CONFIG
|
al@419
|
380 else
|
al@419
|
381 sed -i "s|TERM_FONT=.*|TERM_FONT=\"$font\"|" $CONFIG
|
al@419
|
382 fi
|
al@419
|
383 if [ -z "$TERM_PALETTE" ]; then
|
al@419
|
384 echo -e "\n# Terminal color palette\nTERM_PALETTE=\"$palette\"" >> $CONFIG
|
al@419
|
385 else
|
al@419
|
386 sed -i "s|TERM_PALETTE=.*|TERM_PALETTE=\"$palette\"|" $CONFIG
|
al@419
|
387 fi
|
al@419
|
388
|
al@419
|
389 cat <<EOT
|
al@419
|
390 <section>
|
al@419
|
391 <header>
|
al@419
|
392 $(gettext 'Terminal settings')
|
al@419
|
393 <form>
|
al@419
|
394 <button name="terminal" data-icon="terminal">$(gettext 'Terminal')</button>
|
al@419
|
395 </form>
|
al@419
|
396 </header>
|
al@419
|
397 <pre class="term $pal" style="height: auto; font-family: '$font'">
|
al@419
|
398 <span class='color31'>$user@$(hostname)</span>:<span class='color33'>~</span># palette
|
al@419
|
399
|
al@419
|
400 $(
|
al@419
|
401 for i in $(seq 30 37); do
|
al@419
|
402 for b in 0 1; do
|
al@419
|
403 for j in $(seq 40 47); do
|
al@419
|
404 echo -n "<span class=\"color$b color$i color$j\">$i:$j</span>"
|
al@419
|
405 done
|
al@419
|
406 done
|
al@419
|
407 echo
|
al@419
|
408 done
|
al@419
|
409 )
|
al@419
|
410 </pre>
|
al@419
|
411 <footer>
|
al@419
|
412 <form class="wide">
|
al@419
|
413 $(gettext 'Font:')
|
al@419
|
414 <select name="font">
|
al@419
|
415 <option value="">$(gettext 'Default')</option>
|
al@419
|
416 $(fc-list :spacing=mono:lang=en family | sed '/\.pcf/d;/,/d;s|\\-|-|g' | sort -u | \
|
al@419
|
417 awk -vfont="$font" '{
|
al@419
|
418 printf("<option value=\"%s\"%s>%s</option>\n", $0, ($0 == font)?" selected":"", $0)
|
al@419
|
419 }')
|
al@419
|
420 </select>
|
al@419
|
421 $(gettext 'Palette:')
|
al@419
|
422 <select name="palette">
|
al@419
|
423 $(echo -e 'Tango\nLinux\nXterm\nRxvt\nEcho' | awk -vpal="$palette" '{
|
al@419
|
424 printf("<option value=\"%s\"%s>%s</option>\n", $0, ($0 == pal)?" selected":"", $0)
|
al@419
|
425 }')
|
al@419
|
426 </select>
|
al@419
|
427 <button name="termsettings" data-icon="ok">$(gettext 'Apply')</button>
|
al@419
|
428 </form>
|
al@419
|
429 </footer>
|
al@419
|
430 </section>
|
al@419
|
431 EOT
|
al@419
|
432
|
al@419
|
433 ;;
|
al@419
|
434
|
al@419
|
435
|
pascal@144
|
436 *\ top\ *)
|
al@419
|
437 TITLE=$(gettext 'TazPanel - Process activity'); header; xhtml_header
|
al@419
|
438
|
al@419
|
439 r=$(GET refresh)
|
al@419
|
440 cat <<EOT
|
al@419
|
441 <form>
|
al@419
|
442 <p>$(gettext 'Refresh:')
|
naitsirhc@268
|
443 <input type="hidden" name="top"/>
|
al@419
|
444 <input type="radio" name="refresh" value="1" id="r1" $([ "$r" == 1 ] && echo checked) onchange="this.form.submit()"/>
|
al@419
|
445 <label for="r1">$(gettext '1s' )</label>
|
al@419
|
446 <input type="radio" name="refresh" value="5" id="r2" $([ "$r" == 5 ] && echo checked) onchange="this.form.submit()"/>
|
al@419
|
447 <label for="r2">$(gettext '5s' )</label>
|
al@419
|
448 <input type="radio" name="refresh" value="10" id="r3" $([ "$r" == 10 ] && echo checked) onchange="this.form.submit()"/>
|
al@419
|
449 <label for="r3">$(gettext '10s' )</label>
|
al@419
|
450 <input type="radio" name="refresh" value="" id="r4" $([ -z "$r" ] && echo checked) onchange="this.form.submit()"/>
|
al@419
|
451 <label for="r4">$(gettext 'none')</label>
|
al@419
|
452 </p>
|
al@303
|
453 </form>
|
al@303
|
454 EOT
|
al@419
|
455 [ -n "$r" ] && echo "<meta http-equiv=\"refresh\" content=\"$r\">"
|
naitsirhc@268
|
456
|
al@419
|
457 echo '<section><div><pre class="term log">'
|
al@303
|
458 top -n1 -b | htmlize | sed \
|
al@419
|
459 -e 's|^[A-Z].*:|<span class="color1 color31">\0</span>|g' \
|
al@419
|
460 -e 's|^\ *PID|<span class="color1 color32">\0</span>|g'
|
al@419
|
461 echo '</pre></div></section>' ;;
|
al@303
|
462
|
al@312
|
463
|
pascal@81
|
464 *\ debug\ *)
|
al@419
|
465 TITLE=$(gettext 'TazPanel - Debug'); header; xhtml_header
|
al@419
|
466
|
al@419
|
467 cat <<EOT
|
al@303
|
468 <h2>$(gettext 'HTTP Environment')</h2>
|
al@303
|
469
|
al@419
|
470 <section>
|
al@419
|
471 <div>
|
al@419
|
472 <pre>$(httpinfo | syntax_highlighter conf)</pre>
|
al@419
|
473 </div>
|
al@419
|
474 </section>
|
al@303
|
475 EOT
|
al@303
|
476 ;;
|
al@303
|
477
|
al@312
|
478
|
pankso@161
|
479 *\ report\ *)
|
al@419
|
480 TITLE=$(gettext 'TazPanel - System report'); header; xhtml_header
|
al@419
|
481
|
pascal@163
|
482 [ -d /var/cache/slitaz ] || mkdir -p /var/cache/slitaz
|
pankso@161
|
483 output=/var/cache/slitaz/sys-report.html
|
al@419
|
484
|
al@419
|
485 cat <<EOT
|
al@419
|
486
|
al@419
|
487 <section>
|
al@419
|
488 <header>$(eval_gettext 'Reporting to: $output')</header>
|
al@419
|
489 <table class="wide zebra">
|
al@419
|
490 <tbody>
|
al@419
|
491 <tr><td>$(gettext 'Creating report header...')</td>
|
al@303
|
492 EOT
|
al@419
|
493 cat > $output <<EOT
|
pankso@161
|
494 <!DOCTYPE html>
|
pankso@161
|
495 <html xmlns="http://www.w3.org/1999/xhtml">
|
pankso@161
|
496 <head>
|
al@419
|
497 <meta charset="utf-8"/>
|
al@303
|
498 <title>$(gettext 'SliTaz system report')</title>
|
pankso@161
|
499 <style type="text/css">
|
al@303
|
500 body { padding: 20px 60px; font-size: 13px; }
|
al@303
|
501 h1, h2 { color: #444; }
|
pankso@161
|
502 pre { background: #f1f1f1; border: 1px solid #ddd;
|
pankso@161
|
503 padding: 10px; border-radius: 4px; }
|
pascal@166
|
504 span.diff-rm { color: red; }
|
pascal@166
|
505 span.diff-add { color: green; }
|
pankso@161
|
506 </style>
|
pankso@161
|
507 </head>
|
pankso@161
|
508 <body>
|
pankso@161
|
509 EOT
|
al@419
|
510 cat <<EOT
|
al@303
|
511 $(ok_status_t)
|
al@303
|
512 <tr><td>$(gettext 'Creating system summary...')</td>
|
al@303
|
513 EOT
|
al@419
|
514 cat >> $output <<EOT
|
al@303
|
515 <h1>$(gettext 'SliTaz system report')</h1>
|
al@303
|
516 $(gettext 'Date:') $(date)
|
pankso@161
|
517 <pre>
|
pascal@163
|
518 uptime : $(uptime)
|
pankso@161
|
519 cmdline : $(cat /proc/cmdline)
|
pankso@161
|
520 version : $(cat /etc/slitaz-release)
|
pankso@161
|
521 packages : $(ls /var/lib/tazpkg/installed | wc -l) installed
|
pankso@161
|
522 kernel : $(uname -r)
|
pankso@161
|
523 </pre>
|
pankso@161
|
524 EOT
|
al@419
|
525 cat <<EOT
|
al@303
|
526 $(ok_status_t)
|
al@303
|
527 <tr><td>$(gettext 'Getting hardware info...')</td>
|
al@303
|
528 EOT
|
al@419
|
529 cat >> $output <<EOT
|
pankso@161
|
530 <h2>free</h2>
|
al@303
|
531 <pre>$(free)</pre>
|
pankso@161
|
532
|
pankso@161
|
533 <h2>lspci -k</h2>
|
al@303
|
534 <pre>$(lspci -k)</pre>
|
pankso@161
|
535
|
pankso@161
|
536 <h2>lsusb</h2>
|
al@303
|
537 <pre>$(lsusb)</pre>
|
pankso@161
|
538
|
pankso@161
|
539 <h2>lsmod</h2>
|
al@303
|
540 <pre>$(lsmod)</pre>
|
pankso@161
|
541
|
pankso@161
|
542 EOT
|
al@419
|
543 cat <<EOT
|
al@303
|
544 $(ok_status_t)
|
al@303
|
545 <tr><td>$(gettext 'Getting networking info...')</td>
|
al@303
|
546 EOT
|
al@419
|
547 cat >> $output <<EOT
|
pankso@161
|
548 <h2>ifconfig -a</h2>
|
al@303
|
549 <pre>$(ifconfig -a)</pre>
|
al@303
|
550
|
pascal@163
|
551 <h2>route -n</h2>
|
al@303
|
552 <pre>$(route -n)</pre>
|
al@303
|
553
|
pascal@163
|
554 <h2>/etc/resolv.conf</h2>
|
al@303
|
555 <pre>$(cat /etc/resolv.conf)</pre>
|
pascal@163
|
556 EOT
|
al@419
|
557 cat <<EOT
|
al@303
|
558 $(ok_status_t)
|
al@303
|
559 <tr><td>$(gettext 'Getting filesystems info...')</td>
|
al@303
|
560 EOT
|
al@419
|
561 cat >> $output <<EOT
|
pascal@163
|
562 <h2>blkid</h2>
|
al@303
|
563 <pre>$(blkid)</pre>
|
al@303
|
564
|
pascal@163
|
565 <h2>fdisk -l</h2>
|
al@303
|
566 <pre>$(fdisk -l)</pre>
|
al@303
|
567
|
pascal@163
|
568 <h2>mount</h2>
|
al@303
|
569 <pre>$(mount)</pre>
|
al@303
|
570
|
pascal@163
|
571 <h2>df -h</h2>
|
al@303
|
572 <pre>$(df -h)</pre>
|
al@303
|
573
|
pascal@163
|
574 <h2>df -i</h2>
|
al@303
|
575 <pre>$(df -i)</pre>
|
pascal@163
|
576 EOT
|
al@419
|
577 cat <<EOT
|
al@303
|
578 $(ok_status_t)
|
al@303
|
579 <tr><td>$(gettext 'Getting boot logs...')</td>
|
al@303
|
580 EOT
|
al@419
|
581 cat >> $output <<EOT
|
al@303
|
582 <h2>$(gettext 'Kernel messages')</h2>
|
al@303
|
583 <pre>$(cat /var/log/dmesg.log)</pre>
|
al@303
|
584
|
al@303
|
585 <h2>$(gettext 'Boot scripts')</h2>
|
al@303
|
586 <pre>$(cat /var/log/boot.log | filter_taztools_msgs)</pre>
|
pankso@161
|
587 EOT
|
al@419
|
588 cat <<EOT
|
al@303
|
589 $(ok_status_t)
|
al@303
|
590 <tr><td>$(gettext 'Creating report footer...')</td>
|
al@303
|
591 EOT
|
al@419
|
592 cat cat >> $output <<EOT
|
pankso@161
|
593 </body>
|
pankso@161
|
594 </html>
|
pankso@161
|
595 EOT
|
al@419
|
596 cat <<EOT
|
al@303
|
597 $(ok_status_t)
|
al@419
|
598 </tbody>
|
al@419
|
599 </table>
|
al@419
|
600 <footer>
|
al@419
|
601 <form><button name="file" value="$output" data-icon="view">$(gettext 'View report')</button></form>
|
al@419
|
602 </footer>
|
al@419
|
603 </section>
|
al@419
|
604
|
al@419
|
605
|
al@318
|
606 $(msg tip "$(gettext 'This report can be attached with a bug report on:')
|
al@419
|
607 <a href="http://bugs.slitaz.org/" target="_blank">bugs.slitaz.org</a></p>")
|
al@303
|
608 EOT
|
al@303
|
609 ;;
|
al@312
|
610
|
al@312
|
611
|
pankso@2
|
612 *)
|
pankso@14
|
613 #
|
pankso@2
|
614 # Default xHTML content
|
pankso@14
|
615 #
|
al@419
|
616 header; xhtml_header
|
pascal@81
|
617 [ -n "$(GET gen_locale)" ] && new_locale=$(GET gen_locale)
|
pascal@81
|
618 [ -n "$(GET rdate)" ] && echo ""
|
al@303
|
619 hostname=$(hostname)
|
al@419
|
620
|
al@419
|
621 cat <<EOT
|
al@419
|
622 <h2>$(eval_gettext 'Host: $hostname')</h2>
|
al@419
|
623 <p>$(gettext 'SliTaz administration and configuration Panel')<p>
|
al@419
|
624
|
al@419
|
625 <form class="nogap"><!--
|
al@419
|
626 --><button name="terminal" data-icon="terminal">$(gettext 'Terminal' )</button><!--
|
al@437
|
627 --><button name="top" data-icon="proc" >$(gettext 'Process activity')</button><!--
|
al@437
|
628 --><button name="report" data-icon="report" data-root>$(gettext 'Create a report' )</button><!--
|
al@437
|
629 --></form>
|
pankso@14
|
630
|
al@312
|
631 <section>
|
al@419
|
632 <header>$(gettext 'Summary')</header>
|
al@419
|
633 <table>
|
al@419
|
634 <tr><td>$(gettext 'Uptime:')</td>
|
al@419
|
635 <td id="uptime">$(uptime | sed 's|\([0-9.:][0-9.:]*\)|<b>\1</b>|g')</td>
|
al@419
|
636 </tr>
|
al@419
|
637 <tr><td>$(gettext 'Memory in Mb:')</td>
|
al@419
|
638 <td>$(free -m | grep Mem: | \
|
al@419
|
639 awk -vline="$(gettext 'Total: %d, Used: %d, Free: %d')" \
|
al@419
|
640 '{ printf(line, $2, $3, $4) }' | \
|
al@419
|
641 sed 's|\([0-9][0-9]*\)|<b>\1</b>|g')</td>
|
al@419
|
642 </tr>
|
al@419
|
643 <tr><td>$(gettext 'Linux kernel:')</td>
|
al@419
|
644 <td>$(uname -r)</td>
|
al@419
|
645 </tr>
|
al@419
|
646 </table>
|
al@419
|
647 </section>
|
al@419
|
648
|
al@419
|
649
|
al@419
|
650 <section>
|
al@419
|
651 <header>
|
al@419
|
652 $(gettext 'Network status')
|
al@419
|
653 <form action="network.cgi">
|
al@419
|
654 <button data-icon="wifi">$(gettext 'Network')</button>
|
al@419
|
655 </form>
|
al@419
|
656 </header>
|
al@419
|
657 $(list_network_interfaces)
|
al@419
|
658 </section>
|
al@419
|
659
|
al@419
|
660
|
al@419
|
661 <section>
|
al@419
|
662 <header>
|
al@419
|
663 $(gettext 'Filesystem usage statistics')
|
al@419
|
664 <form action="hardware.cgi">
|
al@419
|
665 <button data-icon="hdd">$(gettext 'Disks')</button>
|
al@419
|
666 </form>
|
al@419
|
667 </header>
|
al@419
|
668 <table class="wide zebra center">
|
al@303
|
669 EOT
|
al@419
|
670 # Disk stats (management is done as hardware.cgi)
|
al@419
|
671 df_thead
|
al@419
|
672 echo '<tbody>'
|
al@419
|
673 df -h | grep ^/dev | while read fs size used av pct mp; do
|
al@419
|
674 cat <<EOT
|
al@419
|
675 <tr>
|
al@419
|
676 <td><span data-icon="hdd">${fs#/dev/}</span></td>
|
al@419
|
677 <td>$(blkid $fs | sed '/LABEL=/!d;s/.*LABEL="\([^"]*\).*/\1/')</td>
|
al@419
|
678 <td>$(blkid $fs | sed '/TYPE=/!d;s/.*TYPE="\([^"]*\).*/\1/')</td>
|
al@419
|
679 <td>$size</td>
|
al@419
|
680 <td>$av</td>
|
al@419
|
681 <td class="meter"><meter min="0" max="100" value="$(echo $pct | cut -d% -f1)"
|
al@419
|
682 low="$DU_WARN" high="$DU_CRIT" optimum="10"></meter>
|
al@419
|
683 <span>$used - $pct</span>
|
al@419
|
684 </td>
|
al@419
|
685 <td>$mp</td>
|
al@419
|
686 <td>$(blkid $fs | sed '/UUID=/!d;s/.*UUID="\([^"]*\).*/\1/')</td>
|
al@419
|
687 </tr>
|
al@303
|
688 EOT
|
al@303
|
689 done
|
al@419
|
690 cat <<EOT
|
al@419
|
691 </tbody>
|
al@419
|
692 </table>
|
al@312
|
693 </section>
|
pankso@14
|
694
|
al@312
|
695 <section>
|
al@419
|
696 <header>
|
al@419
|
697 $(gettext 'Panel Activity')
|
al@419
|
698 <form>
|
al@419
|
699 <button name="file" value="$LOG_FILE" data-icon="view">$(gettext 'View')</button>
|
al@419
|
700 </form>
|
al@419
|
701 </header>
|
al@419
|
702 <div>
|
al@419
|
703 <pre id="panel-activity">
|
al@419
|
704 $(cat $LOG_FILE | tail -n 8 | sort -r | syntax_highlighter activity)</pre>
|
al@419
|
705 </div>
|
al@312
|
706 </section>
|
pankso@2
|
707 EOT
|
pankso@2
|
708 ;;
|
pankso@2
|
709 esac
|
pankso@2
|
710
|
pankso@14
|
711 xhtml_footer
|
pankso@14
|
712 exit 0
|