The Topmost Processes

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Wer hat schon mal auf der Kommandozeile top ausprobiert? Sicherlich bekannt - oder?

Ich hab das mal als .cgi-Skript für den Disk Station Manager zum Zwecke der Einbettung als 3rd-party-application zusammengebastelt.

Das das Programm sich Intervall mäßig aktualisieren soll, habe ich ein zweite Fassung zusätzlich geschrieben, die beim Beenden in Kraft tritt.

Teil 1: top.cgi

Rich (BBCode):
#!/bin/ash
cat <<EOT
Content-type: text/html

<html><head><title>The Topmost Processes</title></head>
<style>
body,a {font:11px Arial;
      background-color:#ddf
      position:absolute;
      top:40px;}
</style>
<body><form name="f" method="post" action="top.cgi">
<h2>The Topmost Processes on host $(hostname -s)</h2>
<div><pre>
EOT
top|sed 's/.\[.m//g'|sed 's/.\[.//g'
cat <<EOT
</pre></div>
<a href="tops.cgi">stop</a>
<script>window.setTimeout('f.submit()',3000);</script>
</form></body></html>
EOT

Teil 2: tops.cgi

Rich (BBCode):
#!/bin/ash
cat <<EOT
Content-type: text/html

<html><head><title>The Topmost Processes</title></head>
<style>
body {font:11px Arial;
      background-color:#ddf
      position:absolute;
      top:40px;}
</style>
<body>
<h2>The Topmost Processes on host $(hostname -s)</h2>
EOT
echo "<div><pre>"
top|sed 's/.\[.m//g'|sed 's/.\[.//g'
cat <<EOT
</pre></div></body></html>
EOT

Erläuterung: Im ersten Teil ruft sich top.cgi automatisch per Formular alle 3000 Millisekunden selbst auf. Es sei denn, man klickt auf stop. Dann wird nämlich tops.cgi aufgerufen und das enthält keinen automatischen Formular-selbst-Aufruf mehr. Falls man nicht stop klickt, läuft das Skript unendlich weiter (bis man das Licht/System ausmacht :D).

Einbauen geht wie schon bei den anderen .cgi-Skripten ...
 

Anhänge

  • top.jpg
    top.jpg
    81,7 KB · Aufrufe: 274

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Version 2

Hab gerade die Version 2 fertig - mit graphischer Anzeige der Systemauslastung:

top.cgi:

Rich (BBCode):
#!/bin/ash
p=$(echo $QUERY_STRING | sed 's/%2C/,/g')
if [ "$p" == "" ] ; then
 p="0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"
else
 p=${p##*=}
 p=$(echo $p | awk -F, '{for (i=2;i<=NF;++i) printf("%3.1f,",$i)}')
fi
top >tmp
p=${p}$(<tmp awk 'NR>4&&NR<25{s+=$6}END{print s}')
cat <<EOT
Content-type: text/html

<html><head><title>The Topmost Processes</title></head>
<style>
body,a {font:11px Arial;
      background-color:#ddf
      position:absolute;
      top:40px;}
</style>
<body><form name="f" method="get" action="top.cgi">
<h2>The Topmost Processes on host $(hostname -s)</h2>
<input type="hidden" name="p" value="$p">
<div><pre>
EOT
sed 's/.\[.m//g'<tmp |sed 's/.\[.//g'
cat <<EOT
</pre></div>
<img src="http://chart.apis.google.com/chart?cht=ls&chs=510x120&chco=ff3333&
chf=c,lg,90,999999,0.8,000000,0&chd=t:$p">
<br><br><br><a style="margin-left:241px" href="tops.cgi?p=$p">stop</a>
<script>window.setTimeout('f.submit()',5000);</script>
</form></body></html>
EOT

tops.cgi

Rich (BBCode):
#!/bin/ash
p=$(echo $QUERY_STRING | sed 's/%2C/,/g')
p=${p##*=}
p=echo $p | awk -F, '{for (i=2;i<=NF;++i) printf("%3.1f",$i)}'
top >tmp
p=${p},$(<tmp awk 'NR>4&&NR<25{s+=$6}END{print s}')
cat <<EOT
Content-type: text/html

<html><head><title>The Topmost Processes</title></head>
<style>
body {font:11px Arial;
      background-color:#ddf
      position:absolute;
      top:40px;}
</style>
<body>
<h2>The Topmost Processes on host $(hostname -s)</h2>
<div><pre>
EOT
sed 's/.\[.m//g'<tmp |sed 's/.\[.//g'
cat <<EOT
</pre></div>
<img src="http://chart.apis.google.com/chart?cht=ls&chs=510x120&chco=ff3333&
chf=c,lg,90,999999,0.8,000000,0&chd=t:$p">
</form></body></html>
EOT

Bildchen:
 

Anhänge

  • top.jpg
    top.jpg
    91,2 KB · Aufrufe: 240

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
neue Version 2

Soooo, nun habe ich die Top2-Version auf AJAX umgestellt und auch für mich umbenannt in Process Load. AJAX heißt, dass es eine HTML-Datei gibt, die zur Laufzeit per JavaScript eine zweite Datei per XMLHttpRequest aktiviert und deren Ausgabe entgegennimmt und in die eigene Seite einbaut (in das DOM der HTML-Seite integriert). Hört sich alles schlimm an, ist aber doch recht einfach, wenn man den Zusammenhang sieht.

Zunächst die HTML-Datei /usr/syno/synoman/phpsrc/systeminfo/top2.html:

Rich (BBCode):
<html><head><title>Process Load</title>
<script>
var myXMLHTTPRequest = (window.XMLHttpRequest)?
                        new XMLHttpRequest():
                        new ActiveXObject("Microsoft.XMLHTTP");
function LoadHTML(htmlfile){
  myXMLHTTPRequest.open("GET", htmlfile, false); myXMLHTTPRequest.send(null);
  return myXMLHTTPRequest.responseText;
}
var h='http://chart.apis.google.com/chart?cht=ls&chs=500x120&chg=5,20&chco=33aa33&chm=B,77bb77,0,0,0&amp
;chf=a,s,efefeff0&chd=t:';
var c='0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0';
function init() {
  c=c.substring(c.indexOf(',')+1);
  c+=','+LoadHTML('https://syno:5001/phpsrc/systeminfo/top2.cgi');
  co=document.getElementById('content');
  co.innerHTML='<img style="position:absolute;clip:rect(0px, 500px, 120px, 26px)" src="'+h+c+'">';
  window.setTimeout("init()",2000);
}
</script>
<style>h3{font:16px Arial;padding-left:26px}</style>
</head>
<body onload="init()">
<h3>Process Load</h3>
<img style="position:absolute;top:43px;clip:rect(0px, 500px, 120px, 26px)"
src="http://chart.apis.google.com/chart?cht=ls&chs=500x120&chg=5,20
&chco=33aa33&chm=B,77bb77,0,0,0&chf=a,s,efefeff0&
chd=t:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0">
<div id="content"><div>

Die zweite Datei, die oben aufgerufen wird ist die /usr/syno/synoman/phpsrc/systeminfo/top2.cgi:

Rich (BBCode):
#!/bin/sh
cat <<EOT
Content-type: text/html

EOT
top | awk 'NR>4&&NR<25 {s+=$6} END {printf("%d",s)}'

Aufrufen kann man das nun mit https://Name_der_DS:5001/phpsrc/systeminfo/top2.html und schaut wie unten aus. Der Einbau kann nun irgendwohin erfolgen (3rdparty oder sonstwo). Die Aktualisierungszeit ist mit 2000 Millisekunden in der Funktion setTimeout durchaus änderbar:
 

Anhänge

  • top2.jpg
    top2.jpg
    11,2 KB · Aufrufe: 233

Purzel

Benutzer
Mitglied seit
07. Jul 2008
Beiträge
40
Punkte für Reaktionen
0
Punkte
0
Sorry, gehört nicht hier her, aber ich muss Dir einfach mal ein Lob aussprechen, itari! Deine 3rd Party Apps sind wirklich genial! :D
Ich hab zwar noch keine DS, aber ich überlege natürlich schon, was für Anzeigen noch sinnvoll wären - und jedesmal, wenn mir was einfällt, präsentierst Du einen Tag später ein passendes Script dafür. Liest Du zufällig meine Gedanken? ;)

Schöne Grüße,
Purzel
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Also diese 3rd-party Applications interessieren mich brennend, doch leider bin ich bisher trotz Lesen diverser Forenartikel hier noch zu "blöd".

Oder kann es sein, dass man mit der reinen TELNET-Box und den dortigen Befehlen meiner DS-107+ nicht weit kommt und ein externer Linux-PC hierfür notwendig ist ?

Ich habe leider nur Win-XP und Win-Vista PC's.

Gestern wollte ich mal im allerersten Schritt ein leeres Unterverzeichnis für die Applikation "PHPSysInfo" per TELNET-Fenster erstellen. Nachdem ich mich ins Unterverzeichnis durchgehangelt hatte und mit "MD /phpsysinfo" ein Verzeichnis erstellen wollte, sagte mir die DS ich hätte keine Berechtigung.

War aber via TELNET als ADMIN eingeloggt.

Tja, und hier hört's schon auf. Alle bisher von mir im Forum gefundenen Quellen sagen nur was zu tun ist, aber leider nicht wie es zu tun ist.

Gibt's irgenwo eine Anleitung in die ich mich mal einlesen könnte ?

Oder geht das mit meinen Win-PCs wirklich nicht und ein externer Linux-PC (mit evtl. erweiterten Editoren und anderen Zugriffsmöglichkeiten auf die DS) ist zwingend notwendig ?
 

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44

Das heist mkdir phpsysinfo

Das wichtigste:

cd - Verzeichnis wechseln
ls - Inhalt eines Verzeichnis anzeigen
mkdir - Ein neues Verzeichnis erstellen
rmdir - Ein Verzeichnis löschen
cp - Eine Datei kopieren
rm - Eine Datei löschen
mv - Eine Datei verschieben oder umbenennen
find - Eine Datei suchen
chmod - Zugriffsrechte einer Datei oder eines Verzeichnisses ändern
chown - Eigentümer und Gruppe einer Datei oder Verzeichnisses ändern
df - Speicherverbrauch Partitionen anzeigen
du - Speicherverbrauch eines Verzeichnisses anzeigen
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
danke Hexchen ;)

@dg2iag, mit ein klein wenig Interesse und vielleicht auch Mühe kannst das hier zum Einarbeiten verwenden. Die DS ist halt Linux und das muss man halt irgendwie mal ein wenig lernen, wenn man drauf rumturnen will. Ist halt wie die 289-Funktionen des Handys oder 311-Funktionen an deiner Kaffeemaschine mit Web-Interface :D Spass beiseite, du brauchst Interesse und Geduld, dann klappt das auch schon. Und hier ist bestimmt keiner, der deine Fragen nicht auch beantworten würde, wenn es nicht auf Anhieb klappt.
 

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
@itari
@DSL-Hexe

Vielen Dank für Eure Ausführungen und Mühe !

Per Zufall hatte ich über's Wochenende noch eine "3rd-party"-Anleitung direkt auf der Synology-Homepage entdeckt ! Ist im History-Verlauf der Firmware-Versionen versteckt.

Leider scheitert es auch hier wieder an meinen Kenntnissen, auch wenn die Anleitung direkt vom Hersteller kommt und auch im Link im DS-107+ Verzeichnis runterzuladen ist. Die Anleitung passt aber (augenscheinlich) NICHT zu meiner DS-107+.

Denn es geht schon damit los, dass man einige Dateien in ein Unterverzeichnis in /USR/LOCAL/... kopieren soll.

Tja, /USR gibt's bei mir, aber ein darunterliegendes /LOCAL gibt's leider nicht.

Auch wenn ich in der MS-Windows-Welt so einiges modifiziert habe und ich weder von der Registry noch vor irgendwelchen anderen Parameterdateien heute noch eine Scheu habe, lasse ich bei der DS-107+ dennoch die Finger davon, da ich keine Linux-Kenntnisse habe. Und wer weiß was ich verbiege, wenn die Anleitungen nicht wirklich 1:1 auf meine DS gemünzt sind.

Schade !!... :(

Hätte gerne die DS mit ein paar Eurer wirklich TOLLEN Status-/Diagnoseseiten ergänzt, aber das wird mir leider zu heiß. :D

Denn als alter Windows-Anwender weiß man ja (aus leidlicher Erfahrung) "Never touch a running system !!". :D Die Linux-Anwender werden sicherlich darüber lachen.

Ich danke Euch dennoch und werde Eure Infos zu meinen Unterlagen legen. Wer weiß !?..... :D


Gruss
Jochen
 

Trolli

Benutzer
Mitglied seit
12. Jul 2007
Beiträge
9.848
Punkte für Reaktionen
1
Punkte
0
Diese gesamten Anleitungen hier basieren natürlich auf dem von Dir genannten "3rd-party apps integration guide".

Wenn man die eigenen Anwendungen dann ins Verzeichnis /usr/local stellt, werden die zusätzlichen Daten beim Firmwareupgrade nicht gelöscht. Das Verzeichnis existiert aber tatsächlich noch nicht und muss zunächst mal erstellt werden, wenn man es verwenden möchte. Die von Itari gezeigten Skripts verwenden allerdings immer das Verzeichnis /usr/syno/synoman/phpsrc. Dieses Verzeichnis ist so auch bereits vorhanden.

Trolli
 

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Hallo Trolli.

Vielen Dank für Deine Ergänzungen.

Ich lasse aber besser dennoch die Finger davon (auch wenn's mich schier kribbelig macht..), denn beim /usr/syno/synoman/phpsrc bekam ich die Meldung, dass ich keine Berechtigung zum Anlegen eines neuen Unterverzeichnis hätte. Obwohl ich als Admin via Telnet an der DS eingeloggt war.

Daher mache ich mal besser nicht weiter oder warte, bis ich einen Linux-Profi direkt an der Seite habe (sprich "vor der DS sitzend" habe).

Danke nochmals für Eure Hilfe.
 

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44
Nicht als "Admin" ins Telnet gehen sondern als "root". Root hat das gleiche Passwort wie Admin.
 

dg2iaq

Benutzer
Mitglied seit
23. Jan 2008
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Nicht als "Admin" ins Telnet gehen sondern als "root". Root hat das gleiche Passwort wie Admin.

Jetzt geht die Sonne auf !!!! :D

Danke für diese "Linux-Basics". Na dann werde ich doch nach Büroschluss zuhause nochmals einen Versuch starten.

Vielen Dank !!!!
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Jetzt geht die Sonne auf !!!! :D

Danke für diese "Linux-Basics". Na dann werde ich doch nach Büroschluss zuhause nochmals einen Versuch starten.

Vielen Dank !!!!

hi dg2iaq,

kannst du dich noch an diesen deiner Posts erinnern? Ich glaube, du bist mittlerweile ein ganzes Stück weiter - oder? Jetzt beginnst, uns allen Tipps zu geben. Mach weiter so. :)

itari
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat