2016-01-11 3 views
0

Я делаю проект Интернета вещей. У меня есть малина pi с различными датчиками, эта малина записывает данные в базу данных SQL Server каждую минуту. У меня есть платформа в рубине на рельсах, чтобы пользователи видели данные. Я хочу создать новую функцию, пользователи могут создавать несколько сигналов тревоги. Я получил форму на странице приложения, чтобы пользователи определяли аварийные сигналы.Мониторинг базы данных сервера

Пример: максимальная температура пользователя установлена ​​в пятницу до 23º. Если в пятницу температура достигает 23º, пользователь получает сообщение (это легкий сигнал тревоги может быть более сложным).

Как это сделать?

Я не хочу создавать триггеры в SQL-сегменте, потому что запросы могут быть сложными (у меня нет опыта работы на SQL Server).

+0

Другой подход может заключаться в том, чтобы инициировать тревожное сообщение от малины pi пользователю через тот же компонент, который записывает в базу данных. Таким образом, у вас есть 2 действия при срабатывании будильника, один записывает в базу данных, другой отправляет сообщение пользователю. – vmachan

ответ

1

Способ, которым я это сделал, заключается в использовании планировщика, например. https://github.com/jmettraux/rufus-scheduler и вызвать вызов статического метода, который проверяет, выполняется ли для каждого условия тревоги и затем отправляется сообщение.

Ваша модель будет, возможно,

AlarmType - ИППП с несколькими классами - AlarmIfTemperatureTooHigh, AlarmPrecipiations и т.д.

Класс сигнализации, который принадлежит Пользователю и belongs_to AlarmType, и содержит параметры настройки для пользователя - поэтому AlarmTemperature может иметь максимальную температуру, например, как переменную.

После этого из планировщика он будет вызывать статический метод каждые x минут (независимо от того, что вы хотите), который будет перебирать через AlarmTypes, который, в свою очередь, будет перебирать сигналы, принадлежащие ему, и если условия выполняются, сообщение пользователь (который также принадлежит этому Тревоге). Поскольку AlertType является STI, у вас могут быть разные методы для оценки данных для каждого AlertType, и вы можете иметь столько, сколько хотите, столь же простой и сложный, как вам нравится. Я бы начал просто. :)

STI немного contreverisal возможно, но для меня, мне нравится иметь одну единственную:

has_many :alarm_types. 

alarm_types.all do |alarm_type| 
    alarm_type.run 
end 

без необходимости повторно кода выдается каждый раз, когда я добавить новый тип сигнала.

Смежные вопросы