public void InitTaskForIdYieldsStopped() { Scheduler.InitTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); Assert.AreEqual(TaskStatus.stopped, task.status); }
public void ExistingTaskExists() { Scheduler.InitTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); Assert.That(task.id == testid); }
public void StartTaskForIdYieldsAllocated() { Scheduler.InitTaskForId(testid, test_task_type); Scheduler.StartTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); Assert.AreEqual(TaskStatus.allocated, task.status); }
public static void EnsureTaskRecord(string id, TaskType type) { if (Scheduler.ExistsTaskRecordForId(id, type) == false) { GenUtils.LogMsg("status", "MaybeCreateTaskRecord: creating task for " + id, null); Scheduler.InitTaskForId(id, type); } }
public void UpdateStartTaskForIdYieldsRunning() { Scheduler.InitTaskForId(testid, test_task_type); Scheduler.StartTaskForId(testid, test_task_type); Scheduler.UpdateStartTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); Assert.AreEqual(TaskStatus.running, task.status); }
public void StopTaskForIdYieldsStopTimeGreaterThanStartTime() { Scheduler.InitTaskForId(testid, test_task_type); Scheduler.StartTaskForId(testid, test_task_type); Utils.Wait(3); Scheduler.StopTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); Assert.Greater(task.stop, task.start); }
public void IsNotAbandonedIfWithinInterval() { Scheduler.InitTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); var less_than_interval = new System.TimeSpan(0, (Configurator.nonical_aggregate_interval_hours * 60) - 60, 0); task.start = DateTime.UtcNow - less_than_interval; Scheduler.StoreTaskForId(task, testid, test_task_type); Assert.AreEqual(false, Scheduler.IsAbandoned(testid, test_task_type)); }
public void IsAbandonedIfBeyondInterval() { Scheduler.InitTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); var more_than_interval = new System.TimeSpan(0, (Configurator.nonical_aggregate_interval_hours * 60) + 60, 0); task.start = DateTime.UtcNow - more_than_interval; // started more than 8hrs ago Scheduler.StoreTaskForId(task, testid, test_task_type); Assert.AreEqual(true, Scheduler.IsAbandoned(testid, test_task_type)); }
public void MaybeStartTaskUpdatesStartTime() { Scheduler.InitTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); var now = DateTime.UtcNow; Scheduler.MaybeStartTaskForId(now, test_calinfo, test_task_type); task = Scheduler.FetchTaskForId(testid, test_task_type); Assert.That(task.start > now); }
public void MaybeStartTaskSucceedsForLongEnoughInterval() { Scheduler.InitTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); var ts = new System.TimeSpan(0, (Configurator.nonical_aggregate_interval_hours * 60) + 10, 0); var now = task.start + ts; Scheduler.MaybeStartTaskForId(now, test_calinfo, test_task_type); task = Scheduler.FetchTaskForId(testid, test_task_type); Assert.AreEqual(TaskStatus.allocated, task.status); }
public void MaybeStartTaskFailsForTooShortInterval() { Scheduler.InitTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); var ts = new System.TimeSpan(0, (Configurator.nonical_aggregate_interval_hours * 60) - 10, 0); var now = task.start + ts; Scheduler.MaybeStartTaskForId(now, test_calinfo, test_task_type); task = Scheduler.FetchTaskForId(testid, test_task_type); Assert.AreEqual(TaskStatus.stopped, task.status); }
public void IsAbandonedIfLockedAndNotRunning() { Scheduler.InitTaskForId(testid, test_task_type); var task = Scheduler.FetchTaskForId(testid, test_task_type); //task.running = false; task.status = TaskStatus.stopped; Scheduler.StoreTaskForId(task, testid, test_task_type); Scheduler.LockId(testid, test_task_type); Assert.AreEqual(true, Scheduler.IsAbandoned(testid, test_task_type)); }
public static void UpdateFeedsForId(string id, string json) { TableStorage ts = TableStorage.MakeDefaultTableStorage(); List <Dictionary <string, string> > list_metadict_str; try { list_metadict_str = JsonConvert.DeserializeObject <List <Dictionary <string, string> > >(json); var dupes = ObjectUtils.FindDuplicateValuesForKey(list_metadict_str, "feedurl"); if (dupes.Count > 0) { GenUtils.PriorityLogMsg("warning", string.Format("{0} duplicate feeds for {1}", dupes.Count, id), null); } } catch (Exception e) { GenUtils.PriorityLogMsg("exception", "UpdateFeedsForId: " + json, e.Message + e.StackTrace); throw (e); } var snapshot_changed = ObjectUtils.SavedJsonSnapshot(id, ObjectUtils.JsonSnapshotType.ListDictStr, "feeds", list_metadict_str); if (snapshot_changed == true) { try { var json_blob_name = id + ".feeds.json"; // update json blob var updated_json = ObjectUtils.ListDictStrToJson(list_metadict_str); bs.PutBlob(id, json_blob_name, updated_json, "application/json"); var fes = "feedentryschema"; var fesquery = string.Format("$filter=PartitionKey eq '{0}' and RowKey eq '{1}'", fes, fes); var feed_entry_schema = TableStorage.QueryForSingleEntityAsDictStr(ts, fes, fesquery)["fields"]; GenUtils.LogMsg("status", "UpdateFeedsForId: processing changed snapshot", null); var current_feed_urls = list_metadict_str.Select(feed => feed["feedurl"]).ToList(); GenUtils.LogMsg("status", "UpdateFeedsForId: find existing", null); // query existing feeds var existing_query = string.Format("$filter=PartitionKey eq '{0}' and feedurl ne ''", id); var existing_feeds = ts.QueryAllEntitiesAsListDict("metadata", existing_query, 0).list_dict_obj; List <object> _existing_feed_urls = (List <object>)existing_feeds.Select(feed => feed["feedurl"]).ToList(); List <string> existing_feed_urls = (List <string>)_existing_feed_urls.Select(x => x.ToString()).ToList(); GenUtils.LogMsg("status", "UpdateFeedsForId: find new and add", null); HandleFeedAdds(id, list_metadict_str, current_feed_urls, existing_feed_urls); var deleted_feed_urls = HandleFeedDeletes(id, ts, current_feed_urls, existing_feed_urls); HandleFeedUpdates(id, ts, list_metadict_str, feed_entry_schema, current_feed_urls, deleted_feed_urls); Utils.RecreatePickledCalinfoAndRenderer(id); Scheduler.InitTaskForId(id, TaskType.icaltasks); bs.DeleteBlob(id, "metadata.html"); // dump the static page var metadata_url = string.Format("http://{0}/{1}/metadata", ElmcityUtils.Configurator.appdomain, id); var args = new Dictionary <string, string>() { { "metadata_url", metadata_url } }; ThreadPool.QueueUserWorkItem(new WaitCallback(rebuild_metahistory_handler), args); // rebuild metadata page on another thread var args2 = new Dictionary <string, string>() { { "id", id } }; // dump feed cache on another thread ThreadPool.QueueUserWorkItem(new WaitCallback(dump_feed_cache_handler), args2); } catch (Exception e) { GenUtils.LogMsg("status", "UpdateFeedsForId", e.Message + e.StackTrace); } } }