PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche ein tailing Applet



big
26-11-2004, 09:59
Hi,

ich bin auf der Suche nach einem Applet welches mir im Browser ein logfile tailt (tail -f).
Gibts da was?

Grüße
big

peschmae
26-11-2004, 16:06
Logfiles tailen braucht meist root-Rechte. Das dürfte noch so schwierig werden.

Ausserdem - wozu soll das genau gut sein? Da kannst du ja genau so gut selber tail eingeben...

MfG Peschmä

Lin728
26-11-2004, 21:11
Du musst ja irgendwie an die Daten am Server kommen, das Applet läuft ja auf deinem client.

d.h. müsstest du deine logs über http freigeben (nein!) und nochdazu immer alles runterladen, da man mit http nicht sagen kann, man möchte bitte nur die letzten 100 bytes ...

gaansch
26-11-2004, 21:47
ich würd versuchen das mit nem php skript zu realisieren.
mit nem pagerefresh von 1 od 2 sekunden. und dann einfach den letzten stand an das skript übergeben oder so.
dann brauch man die files nicht öffentlich zugänglich zu machen

HangLoose
27-11-2004, 16:40
moin moin

mit nem applet kann ich nicht dienen. aber mit nem kleinen webserver, der das von dir verlangte leistet ;).
der user der den webserver startet, sollte in der /etc/sudoers stehen, da ich zum ausgeben des logfiles sudo benutze.

da ich nicht weiß, wie ich die ausgabe von tail *umbiegen* kann, lese ich das logfile mittels cat in ne temp. datei und füge dann nur die letzten 10 zeilen in den html output ein. bei großen logfiles ist das natürlich murks ;).


aufruf: scriptname /pfad/zum/logfile



#! /usr/bin/env python

import BaseHTTPServer
import os
import sys


PORT = 9000
TEMPDAT = '/home/rip/log.dat'

def tail_html(logfile):

os.popen('sudo cat '+logfile+' > ' + TEMPDAT)
f = file('/home/rip/log.dat', 'r')
tail = f.readlines()

html_parts = [
'<html><head><title>Logfile %s </title></head>' %
logfile,
'<body>',
'<h1>Logfile %s</h1>' % logfile,
'<br><br>']
for each in tail[len(tail)-10:]:
html_parts.append(each+'<br>')
html_parts.append('</table></body>')
return "\n".join(html_parts)

class Webserver(BaseHTTPServer.BaseHTTPRequestHandler):

logfile = ''


def send_content(self, content, content_type="text/plain", status=200):
self.send_response(status)
self.send_header("Content-type", content_type)
self.send_header("Content-length", str(len(content)))
self.end_headers()
self.wfile.write(content)

def do_GET(self):

try:
output = tail_html(self.logfile)
except :
self.send_content('Fehler', status=400)
else:
self.send_content(output, content_type="text/html")

def main(file):
server = BaseHTTPServer.HTTPServer(('', PORT), Webserver)
Webserver.logfile = file
server.serve_forever()

if __name__ == '__main__':
try:
if len(sys.argv) != 2:
print 'usage: \n\n'+ str(sys.argv[0].split('/').pop()) + ' logfile'
else:
main(sys.argv[1])

except KeyboardInterrupt:
print "\nBeenden ..."




edit: hm, wenn ich mir die frage nochmal so durchlese und mir das wort *applet* so durch den kopf gehen lasse, bin ich wohl wieder mal haarscharf an der aufgabenstellung vorbei geschliddert :D. naja egal


Gruß HL

gaansch
27-11-2004, 19:01
[...]

edit: hm, wenn ich mir die frage nochmal so durchlese und mir das wort *applet* so durch den kopf gehen lasse, bin ich wohl wieder mal haarscharf an der aufgabenstellung vorbei geschliddert :D. naja egal


Gruß HL

Aber das ganze mit nem applet zu lösen ist auch kacke, da das applet beim user läuft.

Hans-Georg Normann
28-11-2004, 12:46
.....da ich nicht weiß, wie ich die ausgabe von tail *umbiegen* kann, lese ich das logfile..........Moin moin

Wieso weist du das nicht? Du machst es doch schon mit
os.popen('sudo cat '+logfile+' > ' + TEMPDAT). Ändere das Ganze ab auf
os.popen('sudo tail -f '+logfile+')und schon hats du (fast) dein Ergebnis. Das Problem: tail -f kehrt nicht zu deiner Pythonausgabe zurück, weil es ja endlos läuft. Also müsste das ganze als Hintergrundprozess gestartet werden.

Hans

Hans-Georg Normann
28-11-2004, 12:51
Noch ein Ansatz: Was spricht denn gegen logger? Messages mit tail -f aufnehmen und an logger weitergeben. Und logger kann das irgendwohin schieben, auf eine Datei, oder eben auch auf ein Socket.


logger [-isd ] [-f file ] [-p pri ] [-t tag ] [-u socket ] [message ... ]
Hans

big
06-12-2004, 08:54
Hallo,

ich danke euch für eure Ansätze!
Mal schaun was ich verwerten kann...

Grüße
big