mirror of
https://github.com/absmach/supermq.git
synced 2026-06-23 07:30:25 +00:00
dcd5ff914d
* initial implementation Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * initial implementation Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * add remove report from nats handler Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * add license header Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * fix failing linter Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * remove unused code Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * update docker compose Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * address comments Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * fix failing linter Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * move runinfo to pkg Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * update report handler Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * update reports handler Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * update handler in reports Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * update repo method from time to due Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * fix validation methods Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * address comments Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * update reports port to 9017 Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * update nginx to support reports Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * fix reports location in nginx Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> * update env variable Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> --------- Signed-off-by: nyagamunene <stevenyaga2014@gmail.com>
97 lines
2.5 KiB
Go
97 lines
2.5 KiB
Go
// Copyright (c) Abstract Machines
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package re
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/absmach/magistrala/pkg/schedule"
|
|
"github.com/absmach/supermq/pkg/errors"
|
|
)
|
|
|
|
const protocol = "nats"
|
|
|
|
// ScriptOutput is the indicator for type of the logic
|
|
// so we can move it to the Go instead calling Go from Lua.
|
|
type ScriptOutput uint
|
|
|
|
const (
|
|
Channels ScriptOutput = iota
|
|
Alarms
|
|
SaveSenML
|
|
Email
|
|
SaveRemotePg
|
|
)
|
|
|
|
var (
|
|
scriptKindToString = [...]string{"channels", "alarms", "save_senml", "email", "save_remote_pg"}
|
|
stringToScriptKind = map[string]ScriptOutput{
|
|
"channels": Channels,
|
|
"alarms": Alarms,
|
|
"save_senml": SaveSenML,
|
|
"email": Email,
|
|
"save_remote_pg": SaveRemotePg,
|
|
}
|
|
)
|
|
|
|
func (s ScriptOutput) String() string {
|
|
if int(s) < 0 || int(s) >= len(scriptKindToString) {
|
|
return "unknown"
|
|
}
|
|
return scriptKindToString[s]
|
|
}
|
|
|
|
// MarshalJSON converts ScriptOutput to JSON.
|
|
func (s ScriptOutput) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(s.String())
|
|
}
|
|
|
|
// UnmarshalJSON parses JSON string into ScriptOutput.
|
|
func (s *ScriptOutput) UnmarshalJSON(data []byte) error {
|
|
var str string
|
|
if err := json.Unmarshal(data, &str); err != nil {
|
|
return err
|
|
}
|
|
lower := strings.ToLower(str)
|
|
if val, ok := stringToScriptKind[lower]; ok {
|
|
*s = val
|
|
return nil
|
|
}
|
|
return errors.New("invalid ScriptOutput: " + str)
|
|
}
|
|
|
|
type (
|
|
// ScriptType indicates Runtime type for the future versions
|
|
// that will support JS or Go runtimes alongside Lua.
|
|
ScriptType uint
|
|
|
|
Metadata map[string]interface{}
|
|
|
|
Script struct {
|
|
Type ScriptType `json:"type"`
|
|
Outputs []ScriptOutput `json:"outputs"`
|
|
Value string `json:"value"`
|
|
}
|
|
)
|
|
|
|
type Rule struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
DomainID string `json:"domain"`
|
|
Metadata Metadata `json:"metadata,omitempty"`
|
|
InputChannel string `json:"input_channel"`
|
|
InputTopic string `json:"input_topic"`
|
|
Logic Script `json:"logic"`
|
|
OutputChannel string `json:"output_channel,omitempty"`
|
|
OutputTopic string `json:"output_topic,omitempty"`
|
|
Schedule schedule.Schedule `json:"schedule"`
|
|
Status Status `json:"status"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
CreatedBy string `json:"created_by"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
UpdatedBy string `json:"updated_by"`
|
|
}
|