Пример #1
0
        private string buildFilePath(ZoneMinderEvent evnt, string image_base_path)
        {
            var dtFrame = evnt.starttime;

            var FrameId = evnt.frameID;

            var monitorName = evnt.monitorName;

            /* get a two digit year for the file path -- this will fail in the year 10,000 :) */
            var tYear    = (dtFrame.Year % 1000).ToString().PadLeft(2, '0');
            var tMonth   = dtFrame.Month.ToString().PadLeft(2, '0');
            var tDay     = dtFrame.Day.ToString().PadLeft(2, '0');
            var tHour    = dtFrame.Hour.ToString().PadLeft(2, '0');
            var tMin     = dtFrame.Minute.ToString().PadLeft(2, '0');
            var tSec     = dtFrame.Second.ToString().PadLeft(2, '0');
            var tFrameId = FrameId.ToString().PadLeft(5, '0');

            if (image_base_path.Substring(image_base_path.Length - 1) != "/")
            {
                image_base_path += "/";
            }
            return(image_base_path + monitorName +
                   "/" + tYear + "/" + tMonth +
                   "/" + tDay + "/" + tHour + "/" + tMin +
                   "/" + tSec + "/" + tFrameId + "-capture.jpg");
        }
Пример #2
0
        static int Main(string[] args)
        {
            RateLimiter rl = new RateLimiter();



            U.log("Starting up and getting configuration");

            U.initConfig();

            if (!checkConfig())
            {
                return(-1);
            }
            U.log("Configuration check complete");

            ZoneMinderEvent.getEvents();

            return(99);
        }
Пример #3
0
 public zmImage(ZoneMinderEvent evnt, string basePath, long eventid)
 {
     fpath   = buildFilePath(evnt, basePath);
     frameId = evnt.frameID;
     eventId = eventid;
 }
Пример #4
0
        public static void getEvents()
        {
            U.log("Starting main event loop");

            var upl = new S3Uploader(U.config["S3Region"], U.config["S3Bucket"]);

            var basePath = U.config["ImgBasePath"];

            if (basePath.Substring(basePath.Length - 1) != "/")
            {
                basePath += "/";
            }

            var sleepSecs = U.config["LoopPauseSeconds"] ?? "3";



            var sleepMs = Convert.ToInt32(sleepSecs) * 1000;

            var lastNotifyTime = DateTime.Now.AddDays(-1);

            using (MySqlConnection connReader = new MySqlConnection(U.config["MySqlConnection"]))
                using (MySqlConnection connWriter = new MySqlConnection(U.config["MySqlConnection"]))
                {
                    while (true)
                    {
                        try
                        {
                            if (connReader.State != System.Data.ConnectionState.Open)
                            {
                                connReader.Open();
                            }

                            if (connWriter.State != System.Data.ConnectionState.Open)
                            {
                                connWriter.Open();
                            }
                            MySqlCommand cmd = new MySqlCommand(U.config["ZMQuery"], connReader);
                            //occassionally write out that we're running..
                            if ((DateTime.Now - lastNotifyTime).TotalSeconds > 120)
                            {
                                U.log("Checking for new events");
                                lastNotifyTime = DateTime.Now;
                            }
                            using (var reader = cmd.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    var e = new ZoneMinderEvent(Convert.ToInt64(reader["frameid"]), reader["monitor_name"].ToString());
                                    e.starttime = Convert.ToDateTime(reader["starttime"]);
                                    var img = new zmImage(e, U.config["ImgBasePath"], Convert.ToInt64(reader["eventid"]));
                                    if (File.Exists(img.fpath))
                                    {
                                        try
                                        {
                                            var s3Key = $"{e.monitorName}/{e.starttime.Year}/{e.starttime.Month.ToString().PadLeft(2, '0')}/{e.starttime.Day.ToString().PadLeft(2, '0')}/{e.starttime.Hour.ToString().PadLeft(2, '0')}-{e.starttime.Minute.ToString().PadLeft(2, '0')}";



                                            //fire and forget here..
                                            upl.uploadFile(img.fpath, s3Key);

                                            // update to mark them as uploaded
                                            var          sql          = $"insert alarm_uploaded (frameid,upload_timestamp,eventid) values ( {e.frameID}, CURRENT_TIMESTAMP, {img.eventId})";
                                            MySqlCommand insertCmd    = new MySqlCommand(sql, connWriter);
                                            var          rowsAffected = insertCmd.ExecuteNonQuery();
                                            if (rowsAffected <= 0)
                                            {
                                                U.log("Did not insert a row into alarm_uploaded");
                                            }
                                        }
                                        catch (Exception exc)
                                        {
                                            U.log("Error uploading/updating db", exc);
                                        }
                                    }
                                    else
                                    {
                                        U.log("File does not exist - " + img.fpath);
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            U.log("Error in outer loop", e);
                        }
                        System.Threading.Thread.Sleep(sleepMs);
                    }
                }
            //return list;
        }