/// <summary> /// If it is time to submit an anonymous Blue Iris usage report, do it in a background thread. /// </summary> /// <param name="lastUsageReportAt">Epoch time (milliseconds) of the last usage report.</param> public static void HandlePossiblePerfDataReport(long lastUsageReportAt) { DateTime lastReportAt = TimeUtil.DateTimeFromEpochMS(lastUsageReportAt); DateTime now = DateTime.UtcNow; if (now < lastReportAt) { lastReportAt = DateTime.MinValue; } if ((now - lastReportAt).TotalDays < 7) { return; // It hasn't been 7 days since the last report. Don't generate a new report. } if ((now - startedReportAt).TotalMinutes < 60) { return; // It hasn't been 60 minutes since the last attempt. Don't generate a new report. } CreatePerfDataReport(true, false); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { long ms = NumberUtil.ParseLong(reader.ReadAsString()); return(TimeUtil.DateTimeFromEpochMS(ms)); }
/// <summary> /// Evaluates the specified filter condition against the event, returning true if the condition is met. /// </summary> /// <param name="condition">Condition</param> /// <param name="e">Event</param> /// <param name="isEventSubmission">Pass true if the current operation is an event submission and this is the automatic filtering run. Additional logging may be performed for debugging purposes.</param> /// <returns></returns> private bool EvalCondition(FilterCondition condition, Event e, bool isEventSubmission) { if (!condition.Enabled) { throw new Exception("Disabled conditions cannot be evaluated."); } if (string.IsNullOrWhiteSpace(condition.TagKey)) { return(false); } string keyLower = condition.TagKey.ToLower(); string valueToTest = null; if (keyLower == "message") { valueToTest = e.Message; } else if (keyLower == "eventtype") { valueToTest = e.EventType.ToString(); } else if (keyLower == "subtype") { valueToTest = e.SubType; } else if (keyLower == "date") { valueToTest = TimeUtil.DateTimeFromEpochMS(e.Date).ToString("yyyy/MM/dd hh/mm/ss tt"); } else if (keyLower == "folder") { if (folderStructure.Value.TryGetNode(e.FolderId, out FolderStructure eventFolder)) { valueToTest = eventFolder.AbsolutePath; } else { valueToTest = null; } } else if (keyLower == "color") { valueToTest = e.Color.ToString("X").PadLeft(8, '0').Substring(2); // Converts to hex color value (6 chars) } else { db.GetEventTags(e); if (e.TryGetTag(keyLower, out string value)) { valueToTest = value; } } bool result; if (condition.Regex) { result = DoRegexOperation(condition, valueToTest); } else { result = DoPlaintextOperation(condition, valueToTest); } if (condition.Not) { result = !result; } if (result && isEventSubmission && Settings.data.verboseSubmitLogging) { Util.SubmitLog(ProjectName, "Event " + e.EventId + " Filter " + condition.FilterId + " Condition " + condition.FilterConditionId + " met"); } return(result); }