# -*- coding: utf-8 # # manage journaldb.json which is a table of vmid's as indexes update on vmcreate and # values of region_id and slave_id. should support deletion of unused id's and be # properly updated on vm migrations #site import json #local import ioconfig import utils def createjnode(vmid, regionid, slaveid): """ create new record into the journal. invoked on vm creation """ journaldb = readjournal() if str(vmid) in journaldb: ioconfig.logger.warning('journal> overwriting id[{}] !'.format(vmid)) else: jnode = { str(vmid):{} } journaldb.update(jnode) ioconfig.logger.info ('journal> r[{}] s[{}] -> id[{}]'.format(regionid, slaveid, vmid)) jdata = { 'vmid':str(vmid), 'slaveid':str(slaveid), 'regionid':str(regionid) } journaldb[str(vmid)] = jdata writedb(journaldb) def getjnode(vmid): """ query the database for records with requested vmid. invoked on user commands """ journaldb = readjournal() try: regionid = journaldb[str(vmid)]['regionid'] slaveid = journaldb[str(vmid)]['slaveid'] ioconfig.logger.info('journal> read: id[{}] -> r[{}] s[{}]'.format(vmid, regionid, slaveid)) except: ioconfig.logger.error('journal> invalid id[{}] !'.format(vmid)) else: return regionid, slaveid def readjournal(): """ read journal """ try: with open('journal.json') as dbr: journaldb = json.load(dbr) dbr.close() except: journaldb = {} ioconfig.logger.warning('journal> initializing...') return journaldb def writedb(journaldb): """ write journal """ with open('journal.json', 'w') as dbw: json.dump(journaldb, dbw) dbw.close()