#include "MasterFile.lsl" integer g_iTotalKeys; integer g_iProcessedKeys; integer Percent(integer I, integer M) { return I*100/M; } string Progress(integer iProg){ // 64 chars max, must account for the brackets, percent sign, and the numbers. integer iMax = 32; iMax -= 2; // Brackets iMax -= 6; // Numbers, spaces, % sign integer i=0; string sFinal = "["; float fProg = (float)("0."+(string)iProg); if(iProg>=100)fProg=1.0; if(iProg<10)fProg=(float)("0.0"+(string)iProg); integer pos = llFloor(iMax * fProg); for(i=0;i<=iMax;i++){ if(i < pos) sFinal += "█"; else if(i == pos)sFinal += ">"; else sFinal += "░"; } sFinal += "] "+(string)iProg+"%"; return sFinal; } SET_HOVER() { llSetText("* BACKING UP TEST *\n"+(string)g_iProcessedKeys+"/"+(string)g_iTotalKeys+"\n"+Progress(Percent(g_iProcessedKeys, g_iTotalKeys)), <1,0,0>,1); } string g_sLastDate; default { state_entry() { llSetTimerEvent(60); } dataserver(key kID, string sData) { if(HasDSRequest(kID)!=-1) { list lMeta = GetMetaList(kID); if(llList2String(lMeta,0) == "count") { g_iTotalKeys = (integer)llGetSubString(sData,2,-1); g_iProcessedKeys = 0; SET_HOVER(); llSleep(0.25); UpdateDSRequest(kID, llKeysKeyValue(g_iProcessedKeys, 1), "get_key_name"); }else if(llList2String(lMeta,0) == "get_key_name") { llSleep(0.25); UpdateDSRequest(kID, llReadKeyValue(llGetSubString(sData,2,-1)), SetDSMeta(["read_value", llGetSubString(sData,2,-1)])); } else if(llList2String(lMeta,0) == "read_value"){ string sKey = llList2String(lMeta,1); string sValue = llStringToBase64(llGetSubString(sData,2,-1)); DeleteDSReq(kID); llSleep(0.5); UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.dev/zni/SLKVPStoreTesting.php", [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op","set", "id", sKey, "val", sValue])), "sv"); g_iProcessedKeys++; SET_HOVER(); llSleep(0.5); if(g_iProcessedKeys <= g_iTotalKeys-1) UpdateDSRequest(NULL, llKeysKeyValue(g_iProcessedKeys,1), "get_key_name"); else { llSleep(10); //DeleteDSReq(kID); llSetText("** Daily Backup Testing **\nLast Completed: "+g_sLastDate, <0,1,0>, 0.5); } } } } timer() { if(llGetDate()!=g_sLastDate) { g_sLastDate = llGetDate(); llRegionSay(5, "backup"); llSleep(30); llRegionSay(5, "restore9f"); llSetText("Please Stand By\nPerforming daily KVP store backup",<1,0,0>,1); UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.dev/zni/SLKVPStoreTesting.php", [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op","clear"])), "sv"); llSleep(10); UpdateDSRequest(NULL, llKeyCountKeyValue(), "count"); } } http_response(key k,integer s,list m,string b) { if(HasDSRequest(k)!=-1){ DeleteDSReq(k); list lTmp = llParseString2List(b,[";;",";"],[]); if(llList2String(lTmp,1) != "OK"){ llSay(0, "ERROR ("+(string)s+"): "+b); } } } }