summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimeon Simeonov2013-01-25 21:54:44 +0100
committerSimeon Simeonov2013-01-25 21:54:44 +0100
commit3fcb4d9fbcc80b7bb2669eb03f838bb15fa9d5c6 (patch)
tree564af611e2d925eb4cf4e781885ce154a712b984
parent5c2becae337ea7e2bcebec2912e4626d853b16aa (diff)
Some mess added
-rwxr-xr-xbins_server.py140
-rw-r--r--bosd.py31
-rwxr-xr-xsocket_server.py4
-rwxr-xr-xweb_server.py47
-rwxr-xr-xweechat_notify_server.py116
5 files changed, 295 insertions, 43 deletions
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 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import argparse
5import getpass
6import json
7import os
8import sys
9
10import cherrypy
11
12import settings
13
14
15class CustomSocketServer(SocketServer.TCPServer):
16
17 def __init__(self, server_address, RequestHandlerClass, queue):
18 SocketServer.TCPServer.__init__(self,
19 server_address,
20 RequestHandlerClass)
21 self.queue = queue
22
23
24class MyTCPHandler(SocketServer.StreamRequestHandler):
25 """
26 The RequestHandler class for our server.
27
28 It is instantiated once per connection to the server, and must
29 override the handle() method to implement communication to the
30 client.
31 """
32
33 def handle(self):
34
35 data = self.rfile.readline().strip()
36
37 if self.server.queue.qsize() > 3:
38 self.server.queue.get()
39
40 self.server.queue.put(data)
41 #print(self.data)
42
43
44class WebNotifyServer(object):
45
46 def __init__(self, queue):
47 self.queue = queue
48
49 @cherrypy.expose
50 def notifications(self):
51
52 entry_list = list()
53
54 while not self.queue.empty():
55 entry_list.append(self.queue.get(False))
56
57 #print (json.dumps(entry_list, sort_keys=True, indent=4))
58 return json.dumps(entry_list)
59
60
61def socket_server(queue):
62
63 try:
64 server = CustomSocketServer((settings.SOCKET_SERVER_HOST,
65 settings.SOCKET_SERVER_PORT),
66 MyTCPHandler,
67 queue)
68 server.serve_forever()
69
70 except Exception as e:
71 sys.stderr.write("SocketServer error: {0}".format(e))
72 sys.exit(1)
73
74 sys.exit(0)
75
76
77
78def web_server(queue):
79
80 cherrypy.config.update({
81 'server.socket_host': settings.WEB_SERVER_HOST,
82 'server.socket_port': settings.WEB_SERVER_PORT,
83 'server.ssl_module': 'pyopenssl',
84 'server.ssl_certificate': settings.WEB_SERVER_CERT,
85 'server.ssl_private_key': settings.WEB_SERVER_KEY,
86 })
87
88 try:
89
90 cherrypy.quickstart(WebNotifyServer(queue))
91
92 except Exception as e:
93 sys.stderr.write("WebServer error: {0}".format(e))
94 sys.exit(1)
95
96 sys.exit(0)
97
98
99def main():
100
101 parser = argparse.ArgumentParser(description='The following options are available')
102
103
104 parser.add_argument('-d',
105 action='store_true',
106 dest='daemonize',
107 default=False,
108 help='daemonize the server process')
109
110 parser.add_argument('-H', '--hostname',
111 metavar='HOSTNAME',
112 type=str,
113 dest='hostname',
114 default='127.0.0.1',
115 help="Server IP / hostname")
116
117 parser.add_argument('-P', '--port',
118 metavar='PORT',
119 type=int,
120 dest='port',
121 default='9998',
122 help="Server port")
123
124 parser.add_argument('-p', '--password',
125 metavar='PASSWORD',
126 type=str,
127 dest='password',
128 help="Access password for the BOINS server")
129
130 parser.add_argument('-v', '--version',
131 action='version',
132 version='%(prog)s {0}'.format(__VERSION__),
133 help='display program-version and exit')
134
135
136
137 sys.exit(0)
138
139if __name__ == "__main__":
140 main()
diff --git a/bosd.py b/bosd.py
index 4a241be..d678754 100644
--- a/bosd.py
+++ b/bosd.py
@@ -1,7 +1,9 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: utf-8 -*- 2# -*- coding: utf-8 -*-
3 3
4import socket 4import urllib
5import urllib2
6
5import weechat 7import weechat
6 8
7#### CONFIG #### 9#### CONFIG ####
@@ -14,21 +16,28 @@ notify_channels = [
14 "Exile.#pichove" 16 "Exile.#pichove"
15 ] 17 ]
16 18
17connections = [ {'sbosdd_ip': '127.0.0.1', 19connections = [ {'bosd_url': 'https://127.0.0.1:9999/npush/',
18 'sbosdd_port': 9999}, 20 'bosd_password': '1234'},
19# {'sbosdd_ip': "10.0.0.2", 21
20# 'sbosdd_port': 9999} 22# {'bosd_url': 'https://pichove.org:9999/npush/',
23# 'bosd_port': 9999,
24# 'bosd_password': 'foo'},
21 ] 25 ]
22################ 26################
23 27
24def bosd_send_xosd_message(message): 28__VERSION__ = '2.0'
29
30def bosd_send_message(header='', message=''):
25 for conn in connections: 31 for conn in connections:
26 try: 32 try:
33 conn['nheader'] = header # notification header
34 conn['nmessage'] = message # notification message
35
36 data = urllib.urlencode(conn)
37
38 req = urllib2.Request(url, data)
39 urllib2.urlopen(req)
27 #weechat.prnt("", message) 40 #weechat.prnt("", message)
28 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
29 s.connect((conn['sbosdd_ip'], conn['sbosdd_port']))
30 s.send(message)
31 s.close()
32 except: 41 except:
33 continue 42 continue
34 43
@@ -44,7 +53,7 @@ def bosd_command(data, buffer, args):
44 enabled = False 53 enabled = False
45 weechat.prnt(weechat.current_buffer(), "bosd off") 54 weechat.prnt(weechat.current_buffer(), "bosd off")
46 else: 55 else:
47 bosd_send_xosd_message(args) 56 bosd_send_message('BOSD generic', args)
48 57
49 return weechat.WEECHAT_RC_OK 58 return weechat.WEECHAT_RC_OK
50 59
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
14class CustomSocketServer(SocketServer.TCPServer): 14class CustomSocketServer(SocketServer.TCPServer):
15 15
16 def __init__(self, server_address, RequestHandlerClass, session): 16 def __init__(self, server_address, RequestHandlerClass, session):
17 #super(CustomSocketServer, self).__init__(server_address,
18 # RequestHandlerClass)
17 SocketServer.TCPServer.__init__(self, 19 SocketServer.TCPServer.__init__(self,
18 server_address, 20 server_address,
19 RequestHandlerClass) 21 RequestHandlerClass)
@@ -40,7 +42,7 @@ class MyTCPHandler(SocketServer.StreamRequestHandler):
40 42
41def main(): 43def main():
42 44
43 HOST, PORT = "localhost", 9999 45 HOST, PORT = "localhost", 9997
44 46
45 if len(sys.argv) == 2 and sys.argv[1] == '-d': 47 if len(sys.argv) == 2 and sys.argv[1] == '-d':
46 try: 48 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 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: utf-8 -*- 2# -*- coding: utf-8 -*-
3 3
4import json
5import sys 4import sys
6 5
7import cherrypy 6import cherrypy
8 7
9from sqlalchemy import create_engine 8class WebNotifyServer(object):
10from sqlalchemy.orm import sessionmaker
11
12from bpynotify_orm import NotificationEntry, notification_entry_table
13 9
10 def __init__(self):
11 self.counter = 0
14 12
15class WebNotifyServer(object): 13 @cherrypy.expose
14 def notifications(self, **kwargs):
15 self.counter += 1
16 print(str(kwargs))
17 print(self.counter)
18 return ("called")
16 19
17 def __init__(self, session):
18 self.session = session
19 20
20 @cherrypy.expose 21 @cherrypy.expose
21 def notifications(self): 22 def other(self, **kwargs):
22 query = self.session.query(NotificationEntry)\ 23 self.counter += 1
23 .filter(NotificationEntry.viewed==False)\ 24 print(str(kwargs))
24 .order_by(NotificationEntry.id) 25 print(self.counter)
25 entries = query.all() 26 return ("called")
26 entry_list = list()
27 for entry in entries:
28 #print(entry.message)
29 entry_list.append(entry.message)
30 entry.viewed = True
31 self.session.commit()
32 print (json.dumps(entry_list, sort_keys=True, indent=4))
33 return json.dumps(entry_list, sort_keys=True, indent=4)
34 27
35 28
36def main(): 29def main():
37 30
38 cherrypy.config.update({ 31 cherrypy.config.update({
39 'server.socket_host': '10.0.0.4', 32 'server.socket_host': '10.0.0.4',
40 'server.socket_port': 40004, 33 'server.socket_port': 40003,
41
42 'server.ssl_module': 'pyopenssl',
43 'server.ssl_certificate': '/home/blackmore/gitprogs/bpynotify/cert.crt',
44 'server.ssl_private_key': '/home/blackmore/gitprogs/bpynotify/key.pem',
45 }) 34 })
46 35
47 try: 36 try:
48 engine = create_engine('sqlite:///notifications.db') 37 cherrypy.quickstart(WebNotifyServer())
49 Session = sessionmaker(bind=engine) # bound session
50 session = Session()
51
52 cherrypy.quickstart(WebNotifyServer(session))
53 38
54 except Exception as e: 39 except Exception as e:
55 sys.stderr.write("WebServer error: {0}".format(e)) 40 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 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import json
5import SocketServer
6import os
7import sys
8
9from multiprocessing import Process, Queue
10
11import cherrypy
12
13import settings
14
15
16class CustomSocketServer(SocketServer.TCPServer):
17
18 def __init__(self, server_address, RequestHandlerClass, queue):
19 SocketServer.TCPServer.__init__(self,
20 server_address,
21 RequestHandlerClass)
22 self.queue = queue
23
24
25class MyTCPHandler(SocketServer.StreamRequestHandler):
26 """
27 The RequestHandler class for our server.
28
29 It is instantiated once per connection to the server, and must
30 override the handle() method to implement communication to the
31 client.
32 """
33
34 def handle(self):
35
36 data = self.rfile.readline().strip()
37
38 if self.server.queue.qsize() > 3:
39 self.server.queue.get()
40
41 self.server.queue.put(data)
42 #print(self.data)
43
44
45class WebNotifyServer(object):
46
47 def __init__(self, queue):
48 self.queue = queue
49
50 @cherrypy.expose
51 def notifications(self):
52
53 entry_list = list()
54
55 while not self.queue.empty():
56 entry_list.append(self.queue.get(False))
57
58 #print (json.dumps(entry_list, sort_keys=True, indent=4))
59 return json.dumps(entry_list)
60
61
62def socket_server(queue):
63
64 try:
65 server = CustomSocketServer((settings.SOCKET_SERVER_HOST,
66 settings.SOCKET_SERVER_PORT),
67 MyTCPHandler,
68 queue)
69 server.serve_forever()
70
71 except Exception as e:
72 sys.stderr.write("SocketServer error: {0}".format(e))
73 sys.exit(1)
74
75 sys.exit(0)
76
77
78
79def web_server(queue):
80
81 cherrypy.config.update({
82 'server.socket_host': settings.WEB_SERVER_HOST,
83 'server.socket_port': settings.WEB_SERVER_PORT,
84 'server.ssl_module': 'pyopenssl',
85 'server.ssl_certificate': settings.WEB_SERVER_CERT,
86 'server.ssl_private_key': settings.WEB_SERVER_KEY,
87 })
88
89 try:
90
91 cherrypy.quickstart(WebNotifyServer(queue))
92
93 except Exception as e:
94 sys.stderr.write("WebServer error: {0}".format(e))
95 sys.exit(1)
96
97 sys.exit(0)
98
99
100def main():
101
102 q = Queue()
103
104 socket_server_process = Process(target=socket_server, args=(q,))
105 web_server_process = Process(target=web_server, args=(q,))
106
107 web_server_process.start()
108 socket_server_process.start()
109
110 socket_server_process.join()
111 web_server_process.join()
112
113 sys.exit(0)
114
115if __name__ == "__main__":
116 main()