Skip to content

Commit 3f0bb25

Browse files
authored
NOISSUE - Update Rules Service (#32)
* update re service Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com> * add status update for rules Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com> * revert docker compose changes Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com> --------- Signed-off-by: ianmuchyri <ianmuchiri8@gmail.com>
1 parent 3ee7b13 commit 3f0bb25

File tree

10 files changed

+259
-102
lines changed

10 files changed

+259
-102
lines changed

cmd/re/main.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,23 @@ import (
3939

4040
const (
4141
svcName = "rules_engine"
42-
envPrefixDB = "SMQ_RE_DB_"
43-
envPrefixHTTP = "SMQ_RE_HTTP_"
42+
envPrefixDB = "MG_RE_DB_"
43+
envPrefixHTTP = "MG_RE_HTTP_"
4444
envPrefixAuth = "SMQ_AUTH_GRPC_"
4545
defDB = "r"
4646
defSvcHTTPPort = "9008"
4747
)
4848

4949
type config struct {
50-
LogLevel string `env:"SMQ_RE_LOG_LEVEL" envDefault:"info"`
51-
InstanceID string `env:"SMQ_RE_INSTANCE_ID" envDefault:""`
50+
LogLevel string `env:"MG_RE_LOG_LEVEL" envDefault:"info"`
51+
InstanceID string `env:"MG_RE_INSTANCE_ID" envDefault:""`
5252
JaegerURL url.URL `env:"SMQ_JAEGER_URL" envDefault:"http://localhost:4318/v1/traces"`
5353
SendTelemetry bool `env:"SMQ_SEND_TELEMETRY" envDefault:"true"`
5454
ESURL string `env:"SMQ_ES_URL" envDefault:"nats://localhost:4222"`
55-
CacheURL string `env:"SMQ_RE_CACHE_URL" envDefault:"redis://localhost:6379/0"`
56-
CacheKeyDuration time.Duration `env:"SMQ_RE_CACHE_KEY_DURATION" envDefault:"10m"`
55+
CacheURL string `env:"MG_RE_CACHE_URL" envDefault:"redis://localhost:6379/0"`
56+
CacheKeyDuration time.Duration `env:"MG_RE_CACHE_KEY_DURATION" envDefault:"10m"`
5757
TraceRatio float64 `env:"SMQ_JAEGER_TRACE_RATIO" envDefault:"1.0"`
58-
ConfigPath string `env:"SMQ_RE_CONFIG_PATH" envDefault:"/config.toml"`
58+
ConfigPath string `env:"MG_RE_CONFIG_PATH" envDefault:"/config.toml"`
5959
BrokerURL string `env:"SMQ_MESSAGE_BROKER_URL" envDefault:"nats://localhost:4222"`
6060
}
6161

docker/.env

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -334,21 +334,21 @@ SMQ_CHANNELS_DB_SSL_ROOT_CERT=
334334
SMQ_CHANNELS_INSTANCE_ID=
335335

336336
### RE
337-
SMQ_RE_LOG_LEVEL=debug
338-
SMQ_RE_HTTP_HOST=re
339-
SMQ_RE_HTTP_PORT=9008
340-
SMQ_RE_HTTP_SERVER_CERT=
341-
SMQ_RE_HTTP_SERVER_KEY=
342-
SMQ_RE_DB_HOST=re-db
343-
SMQ_RE_DB_PORT=5432
344-
SMQ_RE_DB_USER=magistrala
345-
SMQ_RE_DB_PASS=magistrala
346-
SMQ_RE_DB_NAME=rule_engine
347-
SMQ_RE_DB_SSL_MODE=disable
348-
SMQ_RE_DB_SSL_CERT=
349-
SMQ_RE_DB_SSL_KEY=
350-
SMQ_RE_DB_SSL_ROOT_CERT=
351-
SMQ_RE_INSTANCE_ID=
337+
MG_RE_LOG_LEVEL=debug
338+
MG_RE_HTTP_HOST=re
339+
MG_RE_HTTP_PORT=9008
340+
MG_RE_HTTP_SERVER_CERT=
341+
MG_RE_HTTP_SERVER_KEY=
342+
MG_RE_DB_HOST=re-db
343+
MG_RE_DB_PORT=5432
344+
MG_RE_DB_USER=magistrala
345+
MG_RE_DB_PASS=magistrala
346+
MG_RE_DB_NAME=rule_engine
347+
MG_RE_DB_SSL_MODE=disable
348+
MG_RE_DB_SSL_CERT=
349+
MG_RE_DB_SSL_KEY=
350+
MG_RE_DB_SSL_ROOT_CERT=
351+
MG_RE_INSTANCE_ID=
352352

353353
#### Channels Client Config
354354
SMQ_CHANNELS_URL=http://channels:9005

docker/addons/re/docker-compose.yml

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ services:
2222
restart: on-failure
2323
command: postgres -c "max_connections=${SMQ_POSTGRES_MAX_CONNECTIONS}"
2424
environment:
25-
POSTGRES_USER: ${SMQ_RE_DB_USER}
26-
POSTGRES_PASSWORD: ${SMQ_RE_DB_PASS}
27-
POSTGRES_DB: ${SMQ_RE_DB_NAME}
25+
POSTGRES_USER: ${MG_RE_DB_USER}
26+
POSTGRES_PASSWORD: ${MG_RE_DB_PASS}
27+
POSTGRES_DB: ${MG_RE_DB_NAME}
2828
ports:
29-
- 6008:5432
29+
- 6009:5432
3030
networks:
3131
- magistrala-base-net
3232
volumes:
@@ -39,20 +39,20 @@ services:
3939
- re-db
4040
restart: on-failure
4141
environment:
42-
SMQ_RE_LOG_LEVEL: ${SMQ_RE_LOG_LEVEL}
43-
SMQ_RE_HTTP_PORT: ${SMQ_RE_HTTP_PORT}
44-
SMQ_RE_HTTP_HOST: ${SMQ_RE_HTTP_HOST}
45-
SMQ_RE_HTTP_SERVER_CERT: ${SMQ_RE_HTTP_SERVER_CERT}
46-
SMQ_RE_HTTP_SERVER_KEY: ${SMQ_RE_HTTP_SERVER_KEY}
47-
SMQ_RE_DB_HOST: ${SMQ_RE_DB_HOST}
48-
SMQ_RE_DB_PORT: ${SMQ_RE_DB_PORT}
49-
SMQ_RE_DB_USER: ${SMQ_RE_DB_USER}
50-
SMQ_RE_DB_PASS: ${SMQ_RE_DB_PASS}
51-
SMQ_RE_DB_NAME: ${SMQ_RE_DB_NAME}
52-
SMQ_RE_DB_SSL_MODE: ${SMQ_RE_DB_SSL_MODE}
53-
SMQ_RE_DB_SSL_CERT: ${SMQ_RE_DB_SSL_CERT}
54-
SMQ_RE_DB_SSL_KEY: ${SMQ_RE_DB_SSL_KEY}
55-
SMQ_RE_DB_SSL_ROOT_CERT: ${SMQ_RE_DB_SSL_ROOT_CERT}
42+
MG_RE_LOG_LEVEL: ${MG_RE_LOG_LEVEL}
43+
MG_RE_HTTP_PORT: ${MG_RE_HTTP_PORT}
44+
MG_RE_HTTP_HOST: ${MG_RE_HTTP_HOST}
45+
MG_RE_HTTP_SERVER_CERT: ${MG_RE_HTTP_SERVER_CERT}
46+
MG_RE_HTTP_SERVER_KEY: ${MG_RE_HTTP_SERVER_KEY}
47+
MG_RE_DB_HOST: ${MG_RE_DB_HOST}
48+
MG_RE_DB_PORT: ${MG_RE_DB_PORT}
49+
MG_RE_DB_USER: ${MG_RE_DB_USER}
50+
MG_RE_DB_PASS: ${MG_RE_DB_PASS}
51+
MG_RE_DB_NAME: ${MG_RE_DB_NAME}
52+
MG_RE_DB_SSL_MODE: ${MG_RE_DB_SSL_MODE}
53+
MG_RE_DB_SSL_CERT: ${MG_RE_DB_SSL_CERT}
54+
MG_RE_DB_SSL_KEY: ${MG_RE_DB_SSL_KEY}
55+
MG_RE_DB_SSL_ROOT_CERT: ${MG_RE_DB_SSL_ROOT_CERT}
5656
SMQ_MESSAGE_BROKER_URL: ${SMQ_MESSAGE_BROKER_URL}
5757
SMQ_JAEGER_URL: ${SMQ_JAEGER_URL}
5858
SMQ_JAEGER_TRACE_RATIO: ${SMQ_JAEGER_TRACE_RATIO}
@@ -65,9 +65,9 @@ services:
6565
SMQ_SPICEDB_PRE_SHARED_KEY: ${SMQ_SPICEDB_PRE_SHARED_KEY}
6666
SMQ_SPICEDB_HOST: ${SMQ_SPICEDB_HOST}
6767
SMQ_SPICEDB_PORT: ${SMQ_SPICEDB_PORT}
68-
SMQ_RE_INSTANCE_ID: ${SMQ_RE_INSTANCE_ID}
68+
MG_RE_INSTANCE_ID: ${MG_RE_INSTANCE_ID}
6969
ports:
70-
- ${SMQ_RE_HTTP_PORT}:${SMQ_RE_HTTP_PORT}
70+
- ${MG_RE_HTTP_PORT}:${MG_RE_HTTP_PORT}
7171
networks:
7272
- magistrala-base-net
7373
volumes:

re/api/endpoints.go

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,27 +86,74 @@ func listRulesEndpoint(s re.Service) endpoint.Endpoint {
8686
return rulesPageRes{}, nil
8787
}
8888
ret := rulesPageRes{
89+
pageRes: pageRes{
90+
Limit: page.Limit,
91+
Offset: page.Offset,
92+
Total: page.Total,
93+
},
8994
Rules: page.Rules,
9095
}
9196
return ret, nil
9297
}
9398
}
9499

95-
func upadateRuleStatusEndpoint(s re.Service) endpoint.Endpoint {
100+
func deleteRuleEndpoint(s re.Service) endpoint.Endpoint {
96101
return func(ctx context.Context, request interface{}) (interface{}, error) {
97102
session, ok := ctx.Value(api.SessionKey).(authn.Session)
98103
if !ok {
99104
return nil, svcerr.ErrAuthorization
100105
}
101106

102-
req := request.(changeRuleStatusReq)
107+
req := request.(deleteRuleReq)
103108
if err := req.validate(); err != nil {
104-
return updateRoleStatusRes{}, err
109+
return deleteRuleRes{}, err
105110
}
106111
err := s.RemoveRule(ctx, session, req.id)
107112
if err != nil {
108-
return updateRoleStatusRes{false}, err
113+
return deleteRuleRes{false}, err
109114
}
110-
return updateRoleStatusRes{true}, nil
115+
return deleteRuleRes{true}, nil
116+
}
117+
}
118+
119+
func enableRuleEndpoint(s re.Service) endpoint.Endpoint {
120+
return func(ctx context.Context, request interface{}) (interface{}, error) {
121+
session, ok := ctx.Value(api.SessionKey).(authn.Session)
122+
if !ok {
123+
return nil, svcerr.ErrAuthorization
124+
}
125+
126+
req := request.(updateRuleStatusReq)
127+
if err := req.validate(); err != nil {
128+
return updateRuleStatusRes{}, err
129+
}
130+
131+
rule, err := s.EnableRule(ctx, session, req.id)
132+
if err != nil {
133+
return updateRuleStatusRes{}, err
134+
}
135+
136+
return updateRuleStatusRes{Rule: rule}, err
137+
}
138+
}
139+
140+
func disableRuleEndpoint(s re.Service) endpoint.Endpoint {
141+
return func(ctx context.Context, request interface{}) (interface{}, error) {
142+
session, ok := ctx.Value(api.SessionKey).(authn.Session)
143+
if !ok {
144+
return nil, svcerr.ErrAuthorization
145+
}
146+
147+
req := request.(updateRuleStatusReq)
148+
if err := req.validate(); err != nil {
149+
return updateRuleStatusRes{}, err
150+
}
151+
152+
rule, err := s.DisableRule(ctx, session, req.id)
153+
if err != nil {
154+
return updateRuleStatusRes{}, err
155+
}
156+
157+
return updateRuleStatusRes{Rule: rule}, err
111158
}
112159
}

re/api/requests.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,19 @@ import (
99
apiutil "github.com/absmach/supermq/api/http/util"
1010
)
1111

12-
const maxLimitSize = 1000
12+
const (
13+
maxLimitSize = 1000
14+
MaxNameSize = 1024
15+
)
1316

1417
type addRuleReq struct {
1518
re.Rule
1619
}
1720

1821
func (req addRuleReq) validate() error {
22+
if len(req.Name) > api.MaxNameSize || req.Name == "" {
23+
return apiutil.ErrNameSize
24+
}
1925
return nil
2026
}
2127

@@ -57,16 +63,30 @@ func (req updateRuleReq) validate() error {
5763
if len(req.Rule.Logic.Value) == 0 {
5864
return apiutil.ErrEmptyList
5965
}
66+
if len(req.Rule.Name) > api.MaxNameSize || req.Rule.Name == "" {
67+
return apiutil.ErrNameSize
68+
}
69+
70+
return nil
71+
}
72+
73+
type updateRuleStatusReq struct {
74+
id string
75+
}
76+
77+
func (req updateRuleStatusReq) validate() error {
78+
if req.id == "" {
79+
return apiutil.ErrMissingID
80+
}
6081

6182
return nil
6283
}
6384

64-
type changeRuleStatusReq struct {
65-
id string
66-
status re.Status
85+
type deleteRuleReq struct {
86+
id string
6787
}
6888

69-
func (req changeRuleStatusReq) validate() error {
89+
func (req deleteRuleReq) validate() error {
7090
if req.id == "" {
7191
return apiutil.ErrMissingID
7292
}

re/api/responses.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ import (
1414
var (
1515
_ supermq.Response = (*viewRuleRes)(nil)
1616
_ supermq.Response = (*addRuleRes)(nil)
17-
_ supermq.Response = (*changeRuleStatusRes)(nil)
17+
_ supermq.Response = (*updateRuleStatusRes)(nil)
1818
_ supermq.Response = (*rulesPageRes)(nil)
1919
_ supermq.Response = (*updateRuleRes)(nil)
20-
_ supermq.Response = (*updateRoleStatusRes)(nil)
20+
_ supermq.Response = (*deleteRuleRes)(nil)
2121
)
2222

2323
type pageRes struct {
@@ -102,38 +102,38 @@ func (res rulesPageRes) Empty() bool {
102102
return false
103103
}
104104

105-
type changeRuleStatusRes struct {
105+
type updateRuleStatusRes struct {
106106
re.Rule `json:",inline"`
107107
}
108108

109-
func (res changeRuleStatusRes) Code() int {
109+
func (res updateRuleStatusRes) Code() int {
110110
return http.StatusOK
111111
}
112112

113-
func (res changeRuleStatusRes) Headers() map[string]string {
113+
func (res updateRuleStatusRes) Headers() map[string]string {
114114
return map[string]string{}
115115
}
116116

117-
func (res changeRuleStatusRes) Empty() bool {
117+
func (res updateRuleStatusRes) Empty() bool {
118118
return false
119119
}
120120

121-
type updateRoleStatusRes struct {
121+
type deleteRuleRes struct {
122122
deleted bool
123123
}
124124

125-
func (res updateRoleStatusRes) Code() int {
125+
func (res deleteRuleRes) Code() int {
126126
if res.deleted {
127127
return http.StatusNoContent
128128
}
129129

130130
return http.StatusOK
131131
}
132132

133-
func (res updateRoleStatusRes) Headers() map[string]string {
133+
func (res deleteRuleRes) Headers() map[string]string {
134134
return map[string]string{}
135135
}
136136

137-
func (res updateRoleStatusRes) Empty() bool {
137+
func (res deleteRuleRes) Empty() bool {
138138
return true
139139
}

0 commit comments

Comments
 (0)