From 3fcb4d9fbcc80b7bb2669eb03f838bb15fa9d5c6 Mon Sep 17 00:00:00 2001 From: Simeon Simeonov Date: Fri, 25 Jan 2013 21:54:44 +0100 Subject: Some mess added --- bins_server.py | 140 +++++++++++++++++++++++++++++++++++++++++++++++ bosd.py | 31 +++++++---- socket_server.py | 4 +- web_server.py | 47 ++++++---------- weechat_notify_server.py | 116 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 295 insertions(+), 43 deletions(-) create mode 100755 bins_server.py create mode 100755 weechat_notify_server.py diff --git a/bins_server.py b/bins_server.py new file mode 100755 index 0000000..68ccb74 --- /dev/null +++ b/bins_server.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import argparse +import getpass +import json +import os +import sys + +import cherrypy + +import settings + + +class CustomSocketServer(SocketServer.TCPServer): + + def __init__(self, server_address, RequestHandlerClass, queue): + SocketServer.TCPServer.__init__(self, + server_address, + RequestHandlerClass) + self.queue = queue + + +class MyTCPHandler(SocketServer.StreamRequestHandler): + """ + The RequestHandler class for our server. + + It is instantiated once per connection to the server, and must + override the handle() method to implement communication to the + client. + """ + + def handle(self): + + data = self.rfile.readline().strip() + + if self.server.queue.qsize() > 3: + self.server.queue.get() + + self.server.queue.put(data) + #print(self.data) + + +class WebNotifyServer(object): + + def __init__(self, queue): + self.queue = queue + + @cherrypy.expose + def notifications(self): + + entry_list = list() + + while not self.queue.empty(): + entry_list.append(self.queue.get(False)) + + #print (json.dumps(entry_list, sort_keys=True, indent=4)) + return json.dumps(entry_list) + + +def socket_server(queue): + + try: + server = CustomSocketServer((settings.SOCKET_SERVER_HOST, + settings.SOCKET_SERVER_PORT), + MyTCPHandler, + queue) + server.serve_forever() + + except Exception as e: + sys.stderr.write("SocketServer error: {0}".format(e)) + sys.exit(1) + + sys.exit(0) + + + +def web_server(queue): + + cherrypy.config.update({ + 'server.socket_host': settings.WEB_SERVER_HOST, + 'server.socket_port': settings.WEB_SERVER_PORT, + 'server.ssl_module': 'pyopenssl', + 'server.ssl_certificate': settings.WEB_SERVER_CERT, + 'server.ssl_private_key': settings.WEB_SERVER_KEY, + }) + + try: + + cherrypy.quickstart(WebNotifyServer(queue)) + + except Exception as e: + sys.stderr.write("WebServer error: {0}".format(e)) + sys.exit(1) + + sys.exit(0) + + +def main(): + + parser = argparse.ArgumentParser(description='The following options are available') + + + parser.add_argument('-d', + action='store_true', + dest='daemonize', + default=False, + help='daemonize the server process') + + parser.add_argument('-H', '--hostname', + metavar='HOSTNAME', + type=str, + dest='hostname', + default='127.0.0.1', + help="Server IP / hostname") + + parser.add_argument('-P', '--port', + metavar='PORT', + type=int, + dest='port', + default='9998', + help="Server port") + + parser.add_argument('-p', '--password', + metavar='PASSWORD', + type=str, + dest='password', + help="Access password for the BOINS server") + + parser.add_argument('-v', '--version', + action='version', + version='%(prog)s {0}'.format(__VERSION__), + help='display program-version and exit') + + + + sys.exit(0) + +if __name__ == "__main__": + main() diff --git a/bosd.py b/bosd.py index 4a241be..d678754 100644 --- a/bosd.py +++ b/bosd.py @@ -1,7 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import socket +import urllib +import urllib2 + import weechat #### CONFIG #### @@ -14,21 +16,28 @@ notify_channels = [ "Exile.#pichove" ] -connections = [ {'sbosdd_ip': '127.0.0.1', - 'sbosdd_port': 9999}, -# {'sbosdd_ip': "10.0.0.2", -# 'sbosdd_port': 9999} +connections = [ {'bosd_url': 'https://127.0.0.1:9999/npush/', + 'bosd_password': '1234'}, + +# {'bosd_url': 'https://pichove.org:9999/npush/', +# 'bosd_port': 9999, +# 'bosd_password': 'foo'}, ] ################ -def bosd_send_xosd_message(message): +__VERSION__ = '2.0' + +def bosd_send_message(header='', message=''): for conn in connections: try: + conn['nheader'] = header # notification header + conn['nmessage'] = message # notification message + + data = urllib.urlencode(conn) + + req = urllib2.Request(url, data) + urllib2.urlopen(req) #weechat.prnt("", message) - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((conn['sbosdd_ip'], conn['sbosdd_port'])) - s.send(message) - s.close() except: continue @@ -44,7 +53,7 @@ def bosd_command(data, buffer, args): enabled = False weechat.prnt(weechat.current_buffer(), "bosd off") else: - bosd_send_xosd_message(args) + bosd_send_message('BOSD generic', args) return weechat.WEECHAT_RC_OK diff --git a/socket_server.py b/socket_server.py index f683712..c68e500 100755 --- a/socket_server.py +++ b/socket_server.py @@ -14,6 +14,8 @@ from bpynotify_orm import NotificationEntry, notification_entry_table class CustomSocketServer(SocketServer.TCPServer): def __init__(self, server_address, RequestHandlerClass, session): + #super(CustomSocketServer, self).__init__(server_address, + # RequestHandlerClass) SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass) @@ -40,7 +42,7 @@ class MyTCPHandler(SocketServer.StreamRequestHandler): def main(): - HOST, PORT = "localhost", 9999 + HOST, PORT = "localhost", 9997 if len(sys.argv) == 2 and sys.argv[1] == '-d': try: diff --git a/web_server.py b/web_server.py index a8ccc7c..cec8c38 100755 --- a/web_server.py +++ b/web_server.py @@ -1,55 +1,40 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import json import sys import cherrypy -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker - -from bpynotify_orm import NotificationEntry, notification_entry_table +class WebNotifyServer(object): + def __init__(self): + self.counter = 0 -class WebNotifyServer(object): + @cherrypy.expose + def notifications(self, **kwargs): + self.counter += 1 + print(str(kwargs)) + print(self.counter) + return ("called") - def __init__(self, session): - self.session = session @cherrypy.expose - def notifications(self): - query = self.session.query(NotificationEntry)\ - .filter(NotificationEntry.viewed==False)\ - .order_by(NotificationEntry.id) - entries = query.all() - entry_list = list() - for entry in entries: - #print(entry.message) - entry_list.append(entry.message) - entry.viewed = True - self.session.commit() - print (json.dumps(entry_list, sort_keys=True, indent=4)) - return json.dumps(entry_list, sort_keys=True, indent=4) + def other(self, **kwargs): + self.counter += 1 + print(str(kwargs)) + print(self.counter) + return ("called") def main(): cherrypy.config.update({ 'server.socket_host': '10.0.0.4', - 'server.socket_port': 40004, - - 'server.ssl_module': 'pyopenssl', - 'server.ssl_certificate': '/home/blackmore/gitprogs/bpynotify/cert.crt', - 'server.ssl_private_key': '/home/blackmore/gitprogs/bpynotify/key.pem', + 'server.socket_port': 40003, }) try: - engine = create_engine('sqlite:///notifications.db') - Session = sessionmaker(bind=engine) # bound session - session = Session() - - cherrypy.quickstart(WebNotifyServer(session)) + cherrypy.quickstart(WebNotifyServer()) except Exception as e: sys.stderr.write("WebServer error: {0}".format(e)) diff --git a/weechat_notify_server.py b/weechat_notify_server.py new file mode 100755 index 0000000..35d4f42 --- /dev/null +++ b/weechat_notify_server.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import json +import SocketServer +import os +import sys + +from multiprocessing import Process, Queue + +import cherrypy + +import settings + + +class CustomSocketServer(SocketServer.TCPServer): + + def __init__(self, server_address, RequestHandlerClass, queue): + SocketServer.TCPServer.__init__(self, + server_address, + RequestHandlerClass) + self.queue = queue + + +class MyTCPHandler(SocketServer.StreamRequestHandler): + """ + The RequestHandler class for our server. + + It is instantiated once per connection to the server, and must + override the handle() method to implement communication to the + client. + """ + + def handle(self): + + data = self.rfile.readline().strip() + + if self.server.queue.qsize() > 3: + self.server.queue.get() + + self.server.queue.put(data) + #print(self.data) + + +class WebNotifyServer(object): + + def __init__(self, queue): + self.queue = queue + + @cherrypy.expose + def notifications(self): + + entry_list = list() + + while not self.queue.empty(): + entry_list.append(self.queue.get(False)) + + #print (json.dumps(entry_list, sort_keys=True, indent=4)) + return json.dumps(entry_list) + + +def socket_server(queue): + + try: + server = CustomSocketServer((settings.SOCKET_SERVER_HOST, + settings.SOCKET_SERVER_PORT), + MyTCPHandler, + queue) + server.serve_forever() + + except Exception as e: + sys.stderr.write("SocketServer error: {0}".format(e)) + sys.exit(1) + + sys.exit(0) + + + +def web_server(queue): + + cherrypy.config.update({ + 'server.socket_host': settings.WEB_SERVER_HOST, + 'server.socket_port': settings.WEB_SERVER_PORT, + 'server.ssl_module': 'pyopenssl', + 'server.ssl_certificate': settings.WEB_SERVER_CERT, + 'server.ssl_private_key': settings.WEB_SERVER_KEY, + }) + + try: + + cherrypy.quickstart(WebNotifyServer(queue)) + + except Exception as e: + sys.stderr.write("WebServer error: {0}".format(e)) + sys.exit(1) + + sys.exit(0) + + +def main(): + + q = Queue() + + socket_server_process = Process(target=socket_server, args=(q,)) + web_server_process = Process(target=web_server, args=(q,)) + + web_server_process.start() + socket_server_process.start() + + socket_server_process.join() + web_server_process.join() + + sys.exit(0) + +if __name__ == "__main__": + main() -- cgit v1.3