6
8
from dc2 import random_port, prepare_session, Monitor
10
log = logging.getLogger()
11
BUS = 'org.desktopcouch.CouchDB2'
14
from dbus.mainloop.glib import DBusGMainLoop
15
DBusGMainLoop(set_as_default=True)
17
from gi.repository import GObject
23
class CouchDB2(dbus.service.Object):
24
def __init__(self, env, monitor, killfunc):
26
self._env_ = json.dumps(env, sort_keys=True, indent=4)
27
self._monitor = monitor
28
self._killfunc = killfunc
29
log.info('Starting DC2 service on %r', self._bus)
30
self._conn = dbus.SessionBus()
31
super(CouchDB2, self).__init__(self._conn, object_path='/')
32
self._busname = dbus.service.BusName(self._bus, self._conn)
33
self._timeout_id = GObject.timeout_add(60 * 1000, self._check)
38
except Exception as e:
41
return True # Repeat timeout call
43
@dbus.service.method(IFACE, in_signature='', out_signature='s')
48
return dc2.__version__
50
@dbus.service.method(IFACE, in_signature='', out_signature='')
53
Kill the `dc2-service` process.
55
log.info('Killing dc2-service on %r', self._bus)
58
@dbus.service.method(IFACE, in_signature='', out_signature='s')
61
Return DC2 env as a JSON string.
66
@dbus.service.method(IFACE, in_signature='', out_signature='')
69
Terminate the couchdb process to simulate a crash and test respawning.
8
74
(socket, port) = random_port()
9
75
(env, ini) = prepare_session(port)
77
monitor = Monitor(env, ini)
78
socket.close() # We hold the port till right before handing off to CouchDB
81
mainloop = GObject.MainLoop()
82
service = CouchDB2(env, monitor, mainloop.quit)