Example #1
0
        /// <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));
        }
Example #3
0
        /// <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);
        }