sclass DBWatcher { S dbID; RemoteDB db; long dbDate; long changeCount = 0; long exportedChangeCount = 0; *() {} *(S *dbID) {} bool live() { ret db != null; } void closeDB { if (db != null) { db.close(); db = null; } } void tryConnect { closeDB(); pcall-short { //print("Trying to connect to " + dbID); db = new RemoteDB(dbID); if (db != null) print("Connected to " + dbID + "."); } } void step { bool liveBefore = live(); if (!live()) tryConnect(); if (!liveBefore && live()) changeCount = 0; if (live() && getLiveData()) ret; closeDB(); getStaticData(); } bool getLiveData() false on exception { time2 { long cc = db.xchangeCount(); int n = db.xcount(); } bool change = cc != changeCount; if (change) ++exportedChangeCount; changeCount = cc; print((change ? "CHANGE. " : "") + "Live change count: " + cc + ", objects: " + n); true; } bool getStaticData() false on exception { File conceptsFile = getFilePossiblyGZipped(getProgramFile(dbID, "concepts.structure")); long mod = conceptsFile.lastModified(); bool change = mod != dbDate; if (change) ++exportedChangeCount; dbDate = mod; print((change ? "CHANGE. " : "") + "DB date: " + dbDate); true; } void run { repeat with sleep 1 { step(); } } }
download show line numbers debug dex old transpilations
Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1007498 |
Snippet name: | DBWatcher - watch changes in a DB (live or from disk) |
Eternal ID of this version: | #1007498/1 |
Text MD5: | 45707a712c4404b67674a35941a7ba52 |
Author: | stefan |
Category: | javax / concepts |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2017-03-25 16:07:07 |
Source code size: | 1479 bytes / 65 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 535 / 1114 |
Referenced in: | [show references] |