/
endpoints.go
110 lines (92 loc) · 2.38 KB
/
endpoints.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package api
import (
"context"
"strings"
"github.com/go-kit/kit/endpoint"
"github.com/mainflux/agent/pkg/agent"
"github.com/mainflux/agent/pkg/config"
)
func pubEndpoint(svc agent.Service) endpoint.Endpoint {
return func(_ context.Context, request interface{}) (interface{}, error) {
req := request.(pubReq)
if err := req.validate(); err != nil {
return nil, err
}
topic := req.Topic
payload := req.Payload
if err := svc.Publish(topic, payload); err != nil {
return genericRes{}, nil
}
return genericRes{
Service: "agent",
Response: "config",
}, nil
}
}
func execEndpoint(svc agent.Service) endpoint.Endpoint {
return func(_ context.Context, request interface{}) (interface{}, error) {
req := request.(execReq)
if err := req.validate(); err != nil {
return nil, err
}
uuid := strings.TrimSuffix(req.BaseName, ":")
out, err := svc.Execute(uuid, req.Value)
if err != nil {
return execRes{}, nil
}
resp := execRes{
BaseName: req.BaseName,
Name: "exec",
Value: out,
}
return resp, nil
}
}
func addConfigEndpoint(svc agent.Service) endpoint.Endpoint {
return func(_ context.Context, request interface{}) (interface{}, error) {
req := request.(addConfigReq)
if err := req.validate(); err != nil {
return nil, err
}
sc := config.ServerConf{Port: req.agent.server.port}
cc := config.ChanConf{
Control: req.agent.channels.control,
Data: req.agent.channels.data,
}
ec := config.EdgexConf{URL: req.agent.edgex.url}
lc := config.LogConf{Level: req.agent.log.level}
mc := config.MQTTConf{
URL: req.agent.mqtt.url,
Username: req.agent.mqtt.username,
Password: req.agent.mqtt.password,
}
a := config.AgentConf{
Server: sc,
Channels: cc,
Edgex: ec,
Log: lc,
MQTT: mc,
}
c := config.Config{Agent: a}
if err := svc.AddConfig(c); err != nil {
return genericRes{}, nil
}
return genericRes{
Service: "agent",
Response: "config",
}, nil
}
}
func viewConfigEndpoint(svc agent.Service) endpoint.Endpoint {
return func(_ context.Context, request interface{}) (interface{}, error) {
c := svc.Config()
return c, nil
}
}
func viewServicesEndpoint(svc agent.Service) endpoint.Endpoint {
return func(_ context.Context, request interface{}) (interface{}, error) {
return svc.Services(), nil
}
}