Exemplo n.º 1
0
        /// <summary>
        /// Enqueues the event for export.
        /// </summary>
        public void EnqueueEvent(EventTableLight.Event ev)
        {
            if (ev == null)
            {
                throw new ArgumentNullException(nameof(ev));
            }

            if (eventQueue != null)
            {
                lock (eventQueue)
                {
                    if (eventQueue.Count < maxQueueSize)
                    {
                        eventQueue.Enqueue(new QueueItem <EventTableLight.Event>(DateTime.UtcNow, ev));
                    }
                    else
                    {
                        eventStats.SkippedItems++;
                        log.WriteError(string.Format(Localization.UseRussian ?
                                                     "Невозможно добавить событие в очередь. Максимальный размер очереди {0} превышен" :
                                                     "Unable to enqueue an event. The maximum size of the queue {0} is exceeded",
                                                     maxQueueSize));
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Отправить событие SCADA-Серверу
        /// </summary>
        public bool SendEvent(KPLogic.KPEvent kpEvent)
        {
            if (kpEvent == null || kpEvent.KPTag == null || kpEvent.KPTag.CnlNum <= 0)
            {
                return(true);
            }
            else
            {
                EventTableLight.Event ev = new EventTableLight.Event
                {
                    Number     = kpEvent.KPNum,
                    DateTime   = kpEvent.DateTime,
                    ObjNum     = kpEvent.KPTag.ObjNum,
                    KPNum      = kpEvent.KPNum,
                    ParamID    = kpEvent.KPTag.ParamID,
                    CnlNum     = kpEvent.KPTag.CnlNum,
                    OldCnlVal  = kpEvent.OldData.Val,
                    OldCnlStat = kpEvent.OldData.Stat,
                    NewCnlVal  = kpEvent.NewData.Val,
                    NewCnlStat = kpEvent.NewData.Stat,
                    Checked    = kpEvent.Checked,
                    UserID     = kpEvent.UserID,
                    Descr      = kpEvent.Descr,
                    Data       = kpEvent.Data
                };

                return(SendEvent(ev, out bool result) && result);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Получить текст события
        /// </summary>
        public string GetEventText(EventTableLight.Event ev, InCnlProps cnlProps, CnlStatProps cnlStatProps)
        {
            if (string.IsNullOrEmpty(ev.Descr))
            {
                // текст в формате "<статус>: <значение>"
                StringBuilder sbText = cnlStatProps == null ?
                                       new StringBuilder() : new StringBuilder(cnlStatProps.Name);

                if (ev.NewCnlStat > BaseValues.CnlStatuses.Undefined)
                {
                    if (sbText.Length > 0)
                    {
                        sbText.Append(": ");
                    }
                    sbText.Append(FormatCnlVal(ev.NewCnlVal, ev.NewCnlStat, cnlProps, true));
                }

                return(sbText.ToString());
            }
            else
            {
                // только описание события
                return(ev.Descr);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Отправить событие SCADA-Серверу
        /// </summary>
        public bool SendEvent(KPLogic.KPEvent kpEvent)
        {
            if (kpEvent == null || kpEvent.KPTag == null || kpEvent.KPTag.CnlNum <= 0)
            {
                return(true);
            }
            else
            {
                EventTableLight.Event ev = new EventTableLight.Event();
                ev.Number     = kpEvent.KPNum;
                ev.DateTime   = kpEvent.DateTime;
                ev.ObjNum     = kpEvent.KPTag.ObjNum;
                ev.KPNum      = kpEvent.KPNum;
                ev.ParamID    = kpEvent.KPTag.ParamID;
                ev.CnlNum     = kpEvent.KPTag.CnlNum;
                ev.OldCnlVal  = kpEvent.OldData.Val;
                ev.OldCnlStat = kpEvent.OldData.Stat;
                ev.NewCnlVal  = kpEvent.NewData.Val;
                ev.NewCnlStat = kpEvent.NewData.Stat;
                ev.Checked    = kpEvent.Checked;
                ev.UserID     = kpEvent.UserID;
                ev.Descr      = kpEvent.Descr;
                ev.Data       = kpEvent.Data;

                bool result;
                return(SendEvent(ev, out result) && result);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Get a displayed event based on event data
        /// </summary>
        /// <remarks>The method always returns a non-null object.</remarks>
        public DispEvent GetDispEvent(EventTableLight.Event ev, DataFormatter dataFormatter)
        {
            var dispEvent = new DispEvent();

            try {
                dispEvent.Num  = ev.Number;
                dispEvent.Time = ev.DateTime.ToLocalizedString();
                dispEvent.Ack  = ev.Checked ? CommonPhrases.EventAck : CommonPhrases.EventNotAck;

                var cnlProps     = GetCnlProps(ev.CnlNum);
                var cnlStatProps = GetCnlStatProps(ev.NewCnlStat);

                if (cnlProps == null)
                {
                    dispEvent.Obj = GetObjName(ev.ObjNum);
                    dispEvent.KP  = GetKPName(ev.KPNum);
                }
                else
                {
                    dispEvent.Obj   = cnlProps.ObjName;
                    dispEvent.KP    = cnlProps.KPName;
                    dispEvent.Cnl   = cnlProps.CnlName;
                    dispEvent.Color = dataFormatter.GetCnlValColor(
                        ev.NewCnlVal, ev.NewCnlStat, cnlProps, cnlStatProps);
                    dispEvent.Sound = cnlProps.EvSound;
                }

                dispEvent.Text = dataFormatter.GetEventText(ev, cnlProps, cnlStatProps);
            } catch (Exception ex) {
                log.WriteException(ex, "Error getting displayed event based on the event data");
            }

            return(dispEvent);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Экспортировать события
        /// </summary>
        private void ExportEvents()
        {
            if (ExportParams.ExportEvents)
            {
                DbTransaction         trans = null;
                EventTableLight.Event ev    = null;

                try
                {
                    trans = DataSource.Connection.BeginTransaction();
                    DataSource.ExportEventCmd.Transaction = trans;

                    for (int i = 0; i < BundleSize; i++)
                    {
                        // извлечение события из очереди
                        lock (evQueue)
                        {
                            if (evQueue.Count > 0)
                            {
                                ev = evQueue.Dequeue();
                            }
                            else
                            {
                                break;
                            }
                        }

                        // экспорт
                        ExportEvent(DataSource.ExportEventCmd, ev);

                        expEvCnt++;
                        exportError = false;
                    }

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    if (trans != null)
                    {
                        trans.Rollback();
                    }

                    // возврат события в очередь
                    if (ev != null)
                    {
                        lock (evQueue)
                            evQueue.Enqueue(ev);
                    }

                    log.WriteAction(string.Format(Localization.UseRussian ?
                                                  "Ошибка при экспорте событий в БД {0}: {1}" :
                                                  "Error export events to DB {0}: {1}", DataSource.Name, ex.Message));
                    exportError = true;
                    Thread.Sleep(ErrorDelay);
                }
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// Выполнить действия после создания события и записи на диск
 /// </summary>
 public override void OnEventCreated(EventTableLight.Event ev)
 {
     // экспорт события в БД
     if (normalWork)
     {
         // добавление события в очередь экспорта
         foreach (Exporter exporter in exporters)
         {
             exporter.EnqueueEvent(ev);
         }
     }
 }
Exemplo n.º 8
0
 /// <summary>
 /// Perform actions after creating an event and writing to disk
 /// </summary>
 public override void OnEventCreated(EventTableLight.Event ev)
 {
     // export event to DB
     if (normalWork)
     {
         // adding event to export queue
         foreach (var exporter in exporters)
         {
             exporter.EnqueueEvent(ev);
         }
     }
 }
Exemplo n.º 9
0
        private void btnSend_Click(object sender, EventArgs e)
        {
            // create event to send
            double oldCnlVal = ScadaUtils.StrToDouble(txtOldCnlVal.Text);

            if (double.IsNaN(oldCnlVal))
            {
                ScadaUiUtils.ShowError(ServerShellPhrases.IncorrectOldCnlVal);
                return;
            }

            double newCnlVal = ScadaUtils.StrToDouble(txtNewCnlVal.Text);

            if (double.IsNaN(newCnlVal))
            {
                ScadaUiUtils.ShowError(ServerShellPhrases.IncorrectNewCnlVal);
                return;
            }

            EventTableLight.Event ev = new EventTableLight.Event
            {
                DateTime   = dtpDate.Value.Date.Add(dtpTime.Value.TimeOfDay),
                ObjNum     = decimal.ToInt32(numObjNum.Value),
                KPNum      = decimal.ToInt32(numKPNum.Value),
                ParamID    = decimal.ToInt32(numParamID.Value),
                CnlNum     = decimal.ToInt32(numCnlNum.Value),
                OldCnlVal  = oldCnlVal,
                OldCnlStat = decimal.ToInt32(numOldCnlStat.Value),
                NewCnlVal  = newCnlVal,
                NewCnlStat = decimal.ToInt32(numNewCnlStat.Value),
                Checked    = numUserID.Value > 0,
                UserID     = decimal.ToInt32(numUserID.Value),
                Descr      = txtDescr.Text,
                Data       = txtData.Text
            };

            // send event
            if (serverComm.SendEvent(ev, out bool result))
            {
                DialogResult = DialogResult.OK;
            }
            else
            {
                errLog.WriteError(serverComm.ErrMsg);
                ScadaUiUtils.ShowError(serverComm.ErrMsg);
            }
        }
Exemplo n.º 10
0
 /// <summary>
 /// Экспортировать событие
 /// </summary>
 private void ExportEvent(DbCommand cmd, EventTableLight.Event ev)
 {
     DataSource.SetCmdParam(cmd, "dateTime", ev.DateTime);
     DataSource.SetCmdParam(cmd, "objNum", ev.ObjNum);
     DataSource.SetCmdParam(cmd, "kpNum", ev.KPNum);
     DataSource.SetCmdParam(cmd, "paramID", ev.ParamID);
     DataSource.SetCmdParam(cmd, "cnlNum", ev.CnlNum);
     DataSource.SetCmdParam(cmd, "oldCnlVal", ev.OldCnlVal);
     DataSource.SetCmdParam(cmd, "oldCnlStat", ev.OldCnlStat);
     DataSource.SetCmdParam(cmd, "newCnlVal", ev.NewCnlVal);
     DataSource.SetCmdParam(cmd, "newCnlStat", ev.NewCnlStat);
     DataSource.SetCmdParam(cmd, "checked", ev.Checked);
     DataSource.SetCmdParam(cmd, "userID", ev.UserID);
     DataSource.SetCmdParam(cmd, "descr", ev.Descr);
     DataSource.SetCmdParam(cmd, "data", ev.Data);
     cmd.ExecuteNonQuery();
 }
Exemplo n.º 11
0
 /// <summary>
 /// Добавить событие в очередь экспорта
 /// </summary>
 public void EnqueueEvent(EventTableLight.Event ev)
 {
     lock (evQueue)
     {
         if (evQueue.Count < MaxQueueSize)
         {
             evQueue.Enqueue(ev);
         }
         else
         {
             skipEvCnt++;
             log.WriteAction(string.Format(Localization.UseRussian ?
                                           "Невозможно добавить в очередь событие. Максимальный размер очереди {0} превышен" :
                                           "Unable to enqueue an event. The maximum size of the queue {0} is exceeded",
                                           MaxQueueSize));
         }
     }
 }
Exemplo n.º 12
0
        /// <summary>
        /// Exports the specified event.
        /// </summary>
        private bool ExportEvent(EventTableLight.Event ev, DbTransaction trans)
        {
            Trigger currentTrigger = null;

            try
            {
                foreach (EventTrigger trigger in triggers.EventTriggers)
                {
                    currentTrigger = trigger;

                    if ((trigger.CnlNums.Count == 0 || trigger.CnlNums.Contains(ev.CnlNum)) &&
                        (trigger.DeviceNums.Count == 0 || trigger.DeviceNums.Contains(ev.KPNum)))
                    {
                        DbCommand cmd = trigger.Command;
                        cmd.Transaction = trans;
                        dataSource.SetParam(cmd, "dateTime", ev.DateTime);
                        dataSource.SetParam(cmd, "objNum", ev.ObjNum);
                        dataSource.SetParam(cmd, "kpNum", ev.KPNum);
                        dataSource.SetParam(cmd, "paramID", ev.ParamID);
                        dataSource.SetParam(cmd, "cnlNum", ev.CnlNum);
                        dataSource.SetParam(cmd, "oldCnlVal", ev.OldCnlVal);
                        dataSource.SetParam(cmd, "oldCnlStat", ev.OldCnlStat);
                        dataSource.SetParam(cmd, "newCnlVal", ev.NewCnlVal);
                        dataSource.SetParam(cmd, "newCnlStat", ev.NewCnlStat);
                        dataSource.SetParam(cmd, "checked", ev.Checked);
                        dataSource.SetParam(cmd, "userID", ev.UserID);
                        dataSource.SetParam(cmd, "descr", ev.Descr);
                        dataSource.SetParam(cmd, "data", ev.Data);
                        cmd.ExecuteNonQuery();
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при экспорте события по триггеру \"{0}\"" :
                                   "Error export event by the trigger \"{0}\"",
                                   currentTrigger?.Options?.Name ?? "");
                return(false);
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// Получить отображаемое событие на основе данных события.
        /// </summary>
        /// <remarks>Метод всегда возвращает объект, не равный null.</remarks>
        public DispEvent GetDispEvent(EventTableLight.Event ev, DataFormatter dataFormatter)
        {
            DispEvent dispEvent = new DispEvent();

            try
            {
                dispEvent.Num  = ev.Number;
                dispEvent.Time = ev.DateTime.ToLocalizedString();
                dispEvent.Ack  = ev.Checked ? CommonPhrases.EventAck : CommonPhrases.EventNotAck;

                InCnlProps   cnlProps     = GetCnlProps(ev.CnlNum);
                CnlStatProps cnlStatProps = GetCnlStatProps(ev.NewCnlStat);

                if (cnlProps == null)
                {
                    dispEvent.Obj = GetObjName(ev.ObjNum);
                    dispEvent.KP  = GetKPName(ev.KPNum);
                }
                else
                {
                    dispEvent.Obj   = cnlProps.ObjName;
                    dispEvent.KP    = cnlProps.KPName;
                    dispEvent.Cnl   = cnlProps.CnlName;
                    dispEvent.Color = dataFormatter.GetCnlValColor(
                        ev.NewCnlVal, ev.NewCnlStat, cnlProps, cnlStatProps);
                    dispEvent.Sound = cnlProps.EvSound;
                }

                dispEvent.Text = dataFormatter.GetEventText(ev, cnlProps, cnlStatProps);
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении отображаемого события на основе данных события" :
                                   "Error getting displayed event based on the event data");
            }

            return(dispEvent);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Get event text
        /// </summary>
        public string GetEventText(EventTableLight.Event ev, InCnlProps cnlProps, CnlStatProps cnlStatProps)
        {
            if (string.IsNullOrEmpty(ev.Descr))
            {
                // text in the format "<status>: <value>"
                var sbText =
                    cnlStatProps == null ? new StringBuilder() : new StringBuilder(cnlStatProps.Name);

                if (ev.NewCnlStat > BaseValues.CnlStatuses.Undefined)
                {
                    if (sbText.Length > 0)
                    {
                        sbText.Append(": ");
                    }
                    sbText.Append(FormatCnlVal(ev.NewCnlVal, ev.NewCnlStat, cnlProps, true));
                }

                return(sbText.ToString());
            }

            // description of the event only
            return(ev.Descr);
        }
Exemplo n.º 15
0
 public override void OnEventCreating(EventTableLight.Event ev)
 {
     // the method executes on event creating, event properties could be changed here
     // метод выполняется при создании события, свойства события можно изменить здесь
 }
Exemplo n.º 16
0
 public override void OnEventCreated(EventTableLight.Event ev)
 {
     // the method executes after event creating
     WriteToLog("Process event creating by the module " + Name, Log.ActTypes.Action);
 }
Exemplo n.º 17
0
 public override void OnEventCreated(EventTableLight.Event ev)
 {
     // the method executes after event creating
     // метод выполняется после создания события
     WriteToLog("Process event creating by the module " + Name, Log.ActTypes.Action);
 }
Exemplo n.º 18
0
 /// <summary>
 /// Выполнить действия после создания события и записи на диск
 /// </summary>
 /// <remarks>Метод вызывается после записи на события диск</remarks>
 public virtual void OnEventCreated(EventTableLight.Event ev)
 {
 }
Exemplo n.º 19
0
        protected void Page_Load(object sender, EventArgs e)
        {
            // получение данных пользователя
            UserData userData = UserData.GetUserData();

            // проверка входа в систему
            if (!userData.LoggedOn)
            {
                throw new Exception(WebPhrases.NotLoggedOn);
            }

            // очистка сообщения об ошибке
            lblMessage.Text    = "";
            lblMessage.Visible = false;

            // установка активного элемента формы и кнопки по умолчанию
            Form.DefaultFocus  = btnCheck.ClientID;
            Form.DefaultButton = btnCheck.UniqueID;

            if (IsPostBack)
            {
                Title = (string)ViewState["Title"];
            }
            else
            {
                // перевод веб-страницы
                Localization.TranslatePage(this, "Scada.Web.WFrmEvCheck");

                // определение параметров квитирования
                DateTime date;
                int      evNum;

                try
                {
                    date = new DateTime(int.Parse(Request["year"]), int.Parse(Request["month"]),
                                        int.Parse(Request["day"]));
                    ViewState.Add("Date", date);
                }
                catch
                {
                    throw new Exception(WebPhrases.IncorrectEvDate);
                }

                try
                {
                    evNum = int.Parse(Request["evNum"]);
                    ViewState.Add("EvNum", evNum);
                }
                catch
                {
                    throw new Exception(WebPhrases.IncorrectEvNum);
                }

                // вывод номера и даты события
                lblNum.Text  = evNum.ToString();
                lblDate.Text = date.ToString("d", Localization.Culture);

                // получение квитируемого события
                EventTableLight eventTable;
                AppData.MainData.RefreshEvents(date, out eventTable);
                EventTableLight.Event ev = AppData.MainData.GetEventByNum(eventTable, evNum);

                if (ev == null)
                {
                    lblMessage.Text    = string.Format(WebPhrases.ErrorFormat, WebPhrases.EventNotFound);
                    lblMessage.Visible = true;

                    lblTime.Text     = lblObj.Text = lblKP.Text = lblCnl.Text = lblEvent.Text = "";
                    btnCheck.Enabled = false;
                }
                else
                {
                    // определение индексов выбранного представления
                    int viewSetIndex, viewIndex;
                    if (!int.TryParse(Request["viewSet"], out viewSetIndex))
                    {
                        viewSetIndex = -1;
                    }
                    if (!int.TryParse(Request["view"], out viewIndex))
                    {
                        viewIndex = -1;
                    }

                    // получение представления и прав пользователя на него
                    BaseView       view;
                    MainData.Right right;
                    userData.GetView(null, viewSetIndex, viewIndex, out view, out right);

                    // проверка загрузки представления и прав на квитирование
                    if (view == null)
                    {
                        throw new Exception(WebPhrases.UnableLoadView);
                    }
                    else if (!right.CtrlRight || userData.Role == ServerComm.Roles.Custom &&
                             !view.CnlList.Contains(ev.CnlNum))
                    {
                        throw new Exception(CommonPhrases.NoRights);
                    }

                    MainData.EventView eventView = AppData.MainData.ConvertEvent(ev);
                    lblTime.Text  = eventView.Time;
                    lblObj.Text   = eventView.Obj;
                    lblKP.Text    = eventView.KP;
                    lblCnl.Text   = eventView.Cnl;
                    lblEvent.Text = eventView.Text;

                    lblNum.ForeColor     = lblDate.ForeColor = lblTime.ForeColor = lblObj.ForeColor =
                        lblCnl.ForeColor = lblEvent.ForeColor = Color.FromName(eventView.Color);
                }
            }
        }
Exemplo n.º 20
0
 public override void OnEventCreating(EventTableLight.Event ev)
 {
     // the method executes on event creating, event properties could be changed here
 }
Exemplo n.º 21
0
        private int evNum;         // номер события


        protected void Page_Load(object sender, EventArgs e)
        {
            appData  = AppData.GetAppData();
            userData = UserData.GetUserData();

            // проверка входа в систему
            if (!userData.LoggedOn)
            {
                throw new ScadaException(WebPhrases.NotLoggedOn);
            }

            // скрытие сообщения об ошибке
            pnlErrMsg.HideAlert();

            if (IsPostBack)
            {
                evDate = (DateTime)ViewState["EvDate"];
                evNum  = (int)ViewState["EvNum"];
            }
            else
            {
                // перевод веб-страницы
                Translator.TranslatePage(Page, "Scada.Web.Plugins.Table.WFrmEventAck");

                // получение параметров запроса и сохранение во ViewState
                evDate = Request.QueryString.GetParamAsDate(DateTime.Today);
                evNum  = Request.QueryString.GetParamAsInt("evNum");
                ViewState["EvDate"] = evDate;
                ViewState["EvNum"]  = evNum;

                int viewID = Request.QueryString.GetParamAsInt("viewID");

                // получение события
                EventTableLight       tblEvent = appData.DataAccess.DataCache.GetEventTable(evDate);
                EventTableLight.Event ev       = tblEvent.GetEventByNum(evNum);

                if (ev == null)
                {
                    pnlErrMsg.ShowAlert(lblEventNotFound);
                    btnSubmit.Enabled = false;
                }
                else
                {
                    // проверка прав
                    EntityRights rights = userData.UserRights.GetUiObjRights(viewID);
                    if (!rights.ViewRight)
                    {
                        throw new ScadaException(CommonPhrases.NoRights);
                    }

                    if (!userData.UserRights.ViewAllRight)
                    {
                        BaseView view = userData.UserViews.GetView(viewID, true);
                        if (!view.ContainsCnl(ev.CnlNum))
                        {
                            throw new ScadaException(CommonPhrases.NoRights);
                        }
                    }

                    btnSubmit.Visible = pnlTip.Visible =
                        rights.ControlRight && !ev.Checked;

                    // вывод информации по событию
                    pnlInfo.Visible = true;
                    DispEvent dispEvent = appData.DataAccess.GetDispEvent(ev, new DataFormatter());
                    lblNum.Text     = dispEvent.Num.ToString();
                    lblTime.Text    = dispEvent.Time;
                    lblObj.Text     = dispEvent.Obj;
                    lblDev.Text     = dispEvent.KP;
                    lblCnl.Text     = dispEvent.Cnl;
                    lblText.Text    = dispEvent.Text;
                    lblAck.Text     = dispEvent.Ack;
                    lblAck.CssClass = ev.Checked ? "ack-yes" : "ack-no";

                    if (ev.Checked && ev.UserID > 0)
                    {
                        string userName = appData.DataAccess.GetUserName(ev.UserID);
                        lblByUser.Text    = string.Format(lblByUser.Text, userName);
                        lblByUser.Visible = userName != "";
                    }

                    if (dispEvent.Color != "")
                    {
                        try
                        {
                            lblNum.ForeColor     = lblTime.ForeColor = lblObj.ForeColor =
                                lblDev.ForeColor = lblCnl.ForeColor = lblText.ForeColor =
                                    ColorTranslator.FromHtml(dispEvent.Color);
                        }
                        catch { }
                    }
                }
            }
        }