Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2010-07-25 21:05:38

  johny - Użytkownik

johny
Użytkownik
Zarejestrowany: 2010-05-21

[SOLVED] Automatyczne powiadomienia przez xmpp

cześć,

ostatnio zafascynował mnie protokół xmpp:) i dzisiaj wpadłem na taki pomysł, żeby spróbować zrobić sobie takie coś, co informowałoby mnie o różnych zdarzeniach w systemie właśnie poprzez ten protokół. Bardzo fajna sprawa, może przydatna bardziej dla serwerów, ale z czystej ciekawości chciałbym wiedzieć jak takie coś zrobić :)

Dajmy na to: w momencie, gdy ktoś loguje się na roota na moim systemie to na moje konto jabber wysyłana jest wiadomość o tym logowaniu. Siedzę na innym komputerze, zalogowany do jabbera, i przychodzi mi wiadomość o tym, że ktoś się zalogował na tamten pierwszy komputer.
Można by wstawić linijkę w .bashrc. Tylko jak wysłać samą wiadomość, no bo tak z basha to chyba nie bardzo :> Czy musiałbym pisać jakiegoś bota ? Może jest jakieś gotowe rozwiązanie? Właściwie to chyba to musiałoby być cały czas podłączone do sieci jabbera, tak, żeby nie łączyło się od nowa dla każdego komunikatu. Nie mam pojęcia jak się do tego zabrać, a na forum jest tyle mądrych głów, także liczę, że coś podpowiecie:)

pozdrawiam!

Ostatnio edytowany przez johny (2010-07-27 17:56:44)

Offline

 

#2  2010-07-25 21:08:16

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: [SOLVED] Automatyczne powiadomienia przez xmpp

[deb]sendxmpp[/deb]


Błogosławieni, którzy czynią FAQ.
[url=http://www.opencaching.pl]opencaching[/url] :: [url=http://dug.net.pl/sources.list]debian sources.list[/url] :: [url=http://www.linuxportal.pl/blogi/azhag/wpisy]coś jakby blog[/url] :: [url=http://dug.net.pl/]polski portal debiana[/url] :: linux user #403712

Offline

 

#3  2010-07-25 21:18:24

  johny - Użytkownik

johny
Użytkownik
Zarejestrowany: 2010-05-21

Re: [SOLVED] Automatyczne powiadomienia przez xmpp

No super, coś takiego chciałem :) dzięki

Offline

 

#4  2010-07-25 21:30:37

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [SOLVED] Automatyczne powiadomienia przez xmpp

ewentualnie napisanie bota jabberowego w rubym - 5 linijek na krzyż :) Sam takiego "stworzyłem" w dowolnym momencie mogę go odpytać o stan serwera i kilka innych pierdołek ;)


LRU: #472938
[b]napisz do mnie:[/b] ola@mojmail.eu
[url=http://valhalla.org.pl]Hołmpejdż[/url] | [url=http://valhalla.org.pl/foto]Galerie[/url] | [url=http://valhalla.org.pl/tech]"Twórczość"[/url] || [url=http://img.munn.in]Free Image Hosting[/url]

Offline

 

#5  2010-07-26 15:15:37

  johny - Użytkownik

johny
Użytkownik
Zarejestrowany: 2010-05-21

Re: [SOLVED] Automatyczne powiadomienia przez xmpp

a mógłbyś pokazać kod?

Offline

 

#6  2010-07-26 15:43:52

  Graffi - Użytkownik

Graffi
Użytkownik
Skąd: Sulejówek
Zarejestrowany: 2005-10-03
Serwis

Re: [SOLVED] Automatyczne powiadomienia przez xmpp

python:

Kod:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import xmpp
import dns
import urllib
import re
import codecs
from os import system
from sys import argv

user_jabbera='BOT JID'
pass_jabbera='PASS'
kodow='UTF-8'
zasob='powiadom'

jid=xmpp.JID(user_jabbera)
user,server,password=jid.getNode(),jid.getDomain(),pass_jabbera
conn=xmpp.Client(server,debug=[])
conres=conn.connect()

authres=conn.auth(user,password,zasob)
conn.sendInitPresence()

conn.send(xmpp.Message("ADRESAT",argv[1],typ="chat"))

albo tak jak kto woli :)

Ostatnio edytowany przez Graffi (2010-07-26 15:44:25)

Offline

 

#7  2010-07-26 17:13:02

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [SOLVED] Automatyczne powiadomienia przez xmpp

Kod:

#!/usr/bin/env ruby
require 'rubygems'
require 'jabber/bot'

# Tworzenie nowego publicznego Jabber::Bot
bot = Jabber::Bot.new(
  :jabber_id => 'jid@domena', 
  :password  => 'secret', 
  :master    => 'master1@domena',
  :master     => 'master2@domena',
  :master    => 'master3@domena',
  :is_public => true
)

#Dodanie kilku polecen
bot.add_command(
    :syntax            =>    'info',
    :description    =>    'Wyswietl informacje o pamieci oraz czasie zycia',
    :regex            =>    /^info$/
){info()}

#bot.add_command(
#    :syntax         =>  'pilnuj',
#    :description    =>  'Wyswietl informacje o pamieci oraz czasie zycia',
#    :regex          =>  /^pilnuj$/
#){pilnuj()}

bot.add_command(
 :syntax        => 'kill PID',
 :description   => 'Zabij proces o podanym PID',
 :regex         => /^kill\s+.+$/,
 :alias        => [ 
        :syntax => 'k PID', 
        :regex => /^k\s+.+$/ 
        ]
)do |sender, pid|
        #system("kill -9 '#{pid}'") 
        mms="Ale zabijanie nie dziala :P"
        "'#{mms}' Zabilem proces o ID: '#{pid}'"
end

bot.add_command(
    :syntax         =>  'topm <n>',
    :description    =>  'Pokaz n procesów zajmujących najwiecej pamięci',
    :regex          =>  /^topm\s+.+$/,
    :alias            =>    [
                    :syntax    =>    'm <n>',
                    :regex    =>    /^m\s+.+$/
                    ]
)do |sender, count|
    "'#{topm(count.to_i+1)}'"
end

bot.add_command(
    :syntax         =>  'topc <n>',
    :description    =>  'Pokaz n procesow najbardziej obciążających procesor',
    :regex          =>  /^topc\s+.+$/,
    :alias          =>  [
                    :syntax =>  'c <n>',
                    :regex  =>  /^c\s+.+$/
                    ]
)do |sender, count|
    "'#{topm(count.to_i+1)}'"
end

bot.add_command(
    :syntax         =>  'status',
    :description    =>  'Pokaż status najważniejszych usług',
    :regex          =>  /^status$/,
    :alias          =>  [
                    :syntax =>  's',
                    :regex  =>  /^s$/
                    ]
){status()}

bot.add_command(
    :syntax         =>  'who',
    :description    =>  'Pokaż zalogowanych uzytkownikow',
    :regex          =>  /^who$/,
    :alias          =>  [
                    :syntax =>  'w',
                    :regex  =>  /^w$/
                    ]
){who()}

bot.add_command(
    :syntax         =>  'apacz',
    :description    =>  'Restart Apache2',
    :regex          =>  /^apacz$/,
    :is_public        => true
){apacz()}

bot.add_command(
    :syntax         =>  'last LOGIN',
    :description    =>  'Pokaż ostatnie logowania podanego uzytkownia. Aby wyswietlić informacje o wszystkich uzytkownikach jako login należy podać ALL',
    :regex          =>  /^last\s+.+$/,
    :is_public        =>    true,
    :alias          =>  [
                    :syntax =>  'l LOGIN',
                    :regex  =>  /^l\s+.+$/
                    ]
)do |sender, user|
    "'#{rlast(user)}'"
end

bot.add_command(
    :syntax         =>  'restart USŁUGA',
    :description    =>  'Zrestartuj podaną uslugę. Dostępne usługi: httpd, mysql, pgslq, clam, antyspam, ssh, mail, jabber (UWAGA! Przy wyborze opcji jabber utracisz połączenie ze mną!)',
    :regex          =>  /^restart\s+.+$/,
    :alias          =>  [
                    :syntax =>  'r USŁUGA',
                    :regex  =>  /^r\s+.+$/
                    ]
)do |sender, user|
    ""
end

#### kilka przydatnych i uzywanych funkcji.

# N procesow najmocniej obciazajacych procesor
def topc(n)
    return `echo"";ps axo pid,user,size,time,state,cstime,pcpu,cmd --sort=-pcpu |head -n #{n}`
end

# N procesow zajmujacych najwiecej pamieci
def topm(n)
    return  `echo"";ps axo pid,user,size,time,state,cstime,pcpu,cmd --sort=-size |head -n #{n}`
end

# Status najwazniejszych uslug
def status()
    mysql_status        = `/etc/init.d/mysql status`
    pgsql_status        = `/etc/init.d/postgresql-8.3 status`
    
    if `ps -C apache2 -o pid= |wc -l`.to_i >=1 
        httpd_status = "OK"
    else
        httpd_status = "Nie dziła"
    end

    if `ps -C clamd -o pid=`.to_i > 0 and `ps -C freshclam -o pid=`.to_i > 0
        av_status = "OK"
    else
        av_status = "Nie dziła"
    end
    
    if `ps -C master -o pid=`.to_i > 0 and  `ps -C dovecot -o pid=`.to_i > 0
        mail_status = "OK"
    else
        mail_status = "Nie działa"
    end

    if `ps -C amavisd-new -o pid=`.split.length > 0 
        antyspam_status = "OK"
    else
        antyspam_status = "Nie działa"
    end

    if    pgsql_status.split[3] == "online" and !mysql_status.split.eql?("MySQLisstopped..")
        db_status = "OK"
    else
        db_status = "Nie działają"
    end

    return "HTTP - '#{httpd_status}'\nBazy danych - '#{db_status}'\nAntywirus - '#{av_status}'\nPoczta - '#{mail_status}'\nAntyspam - '#{antyspam_status}'"
end

def apacz()
    system("/etc/init.d/apache2 restart")
    return "Czerwonoskóre byle zrestartowane"
end

# Najważniejsze informacje o systemie - uptime i zasoby pamięci
def info()
    return `echo"";uptime;free -tom`
end

# Pokaż zalogowanych użytkowników
def who()
    return `echo"";w`
end

# ostatnie logowanie użytkownika.
def rlast(uzytkownik)
    if uzytkownik == "ALL"
        return `echo"";last`
    else
        return `echo"";last #{uzytkownik}`
    end
end

def restart(usluga)
    case '#{usluga}'
        when "ssh"        then
                            system("/etc/init.d/ssh restart")
        when "mysql"     then
                            system("/etc/init.d/mysql restart")
        when "pgsql"    then
                            system("/etc/init.d/postgresql-8.3 restart")
        when "httpd"    then
                            system("/etc/init.d/apache2 restart")
        when "clam"        then
                            system("/etc/init.d/clamav-daemon restart")
                            system("/etc/init.d/clamav-freshclam restart")
        when "antyspam"    then
                            system("/etc/init.d/amavis restart")
        when "mail"        then
                            system("/etc/init.d/postfix restart")
                            system("/etc/init.d/dovecot restart")
        when "jabber"    then
                            system("/etc/init.d/ejabberd restart");
    end
end

def pilnuj()
    for i in 0..2
        if i < 1 then
            if status().split.include?("Nie") then
                return "Sprawdź czy wysztkie usługi działają. Wydaje mi się że conajmniej jedna nie odpowiada"
                next
            end
            sleep(1)
            redo
        end    
    end
end
# Bring your new bot to life
bot.connect

LRU: #472938
[b]napisz do mnie:[/b] ola@mojmail.eu
[url=http://valhalla.org.pl]Hołmpejdż[/url] | [url=http://valhalla.org.pl/foto]Galerie[/url] | [url=http://valhalla.org.pl/tech]"Twórczość"[/url] || [url=http://img.munn.in]Free Image Hosting[/url]

Offline

 

#8  2010-07-27 17:55:50

  johny - Użytkownik

johny
Użytkownik
Zarejestrowany: 2010-05-21

Re: [SOLVED] Automatyczne powiadomienia przez xmpp

ok coś sobie z tego wykminie, ewentualnie zostanę przy sendxmpp :)

ps. właśnie postawiłem swój pierwszy serwer ejabberd:) Najwięcej męczyłem się nad podpięciem tego do mysql. Całość stoi na virtualboxie, ale zawsze to ta satysfakcja, że się udało:)

Ostatnio edytowany przez johny (2010-07-27 18:01:01)

Offline

 

#9  2012-04-14 04:18:56

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [SOLVED] Automatyczne powiadomienia przez xmpp

Niech będzie -  Górnik się kłania  z tej strony ;)

Tlen i Gmail mają takie fajne powiadomienia o poczcie, ktore wyświetlają sie jako pasek z wiadomością lub przez notify, ale nie otwierają okna komunikatora.
Właśnie o taką formę powiadomień mi chodzi.

Jak coś takiego wysyłać, i czy ewentualnie jest jakiś mod/skrypt do Postfixa lub Qmaila, który coś takiego potrafi?

Pozdrawiam
;-)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.008 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00009 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00056 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.216.42.122' WHERE u.id=1
0.00108 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.216.42.122', 1732678270)
0.00027 SELECT * FROM punbb_online WHERE logged<1732677970
0.00083 SELECT topic_id FROM punbb_posts WHERE id=152649
0.00111 SELECT id FROM punbb_posts WHERE topic_id=17284 ORDER BY posted
0.00028 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=17284 AND t.moved_to IS NULL
0.00028 SELECT search_for, replace_with FROM punbb_censoring
0.00054 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=17284 ORDER BY p.id LIMIT 0,25
0.00092 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=17284
Total query time: 0.006 s