@@ -24,7 +24,7 @@ type deviceAPI interface {
24
24
DevicesHeartbeat (ctx context.Context , uid string ) error
25
25
26
26
// Lookup performs a lookup operation based on the provided parameters.
27
- Lookup (ctx context.Context , lookup map [string ]string ) (string , [] error )
27
+ Lookup (ctx context.Context , lookup map [string ]string ) (string , error )
28
28
29
29
// DeviceLookup performs a lookup operation based on the provided parameters.
30
30
DeviceLookup (ctx context.Context , tenantID , name string ) (* models.Device , error )
@@ -33,14 +33,16 @@ type deviceAPI interface {
33
33
LookupWebEndpoints (ctx context.Context , address string ) (* WebEndpoint , error )
34
34
}
35
35
36
+ var ErrDeviceRequestFailed = errors .New ("device request failed" )
37
+
36
38
func (c * client ) DevicesOffline (ctx context.Context , uid string ) error {
37
39
_ , err := c .http .
38
40
R ().
39
41
SetContext (ctx ).
40
42
SetPathParam ("uid" , uid ).
41
43
Post (c .Config .APIBaseURL + "/internal/devices/{uid}/offline" )
42
44
if err != nil {
43
- return err
45
+ return errors . Join ( ErrDeviceRequestFailed , err )
44
46
}
45
47
46
48
return nil
@@ -50,27 +52,35 @@ func (c *client) DevicesHeartbeat(ctx context.Context, uid string) error {
50
52
return c .worker .SubmitToBatch (ctx , worker .TaskPattern ("api:heartbeat" ), []byte (uid ))
51
53
}
52
54
53
- func (c * client ) Lookup (ctx context.Context , lookup map [string ]string ) (string , []error ) {
55
+ var ErrLookupFailed = errors .New ("lookup failed" )
56
+
57
+ func (c * client ) Lookup (ctx context.Context , lookup map [string ]string ) (string , error ) {
54
58
var device struct {
55
59
UID string `json:"uid"`
56
60
}
57
61
58
- resp , _ := c .http .
62
+ resp , err := c .http .
59
63
R ().
60
64
SetContext (ctx ).
61
65
SetQueryParams (lookup ).
62
66
SetResult (& device ).
63
67
Get (c .Config .APIBaseURL + "/internal/lookup" )
68
+ if err != nil {
69
+ return "" , errors .Join (ErrDeviceRequestFailed , err )
70
+ }
64
71
65
72
if resp .StatusCode () != http .StatusOK {
66
- return "" , [] error { errors . New ( "lookup failed" )}
73
+ return "" , ErrLookupFailed
67
74
}
68
75
69
76
return device .UID , nil
70
77
}
71
78
79
+ var ErrDeviceLookupFailed = errors .New ("device lookup failed" )
80
+
72
81
func (c * client ) DeviceLookup (ctx context.Context , tenantID , name string ) (* models.Device , error ) {
73
82
device := new (models.Device )
83
+
74
84
resp , err := c .http .
75
85
R ().
76
86
SetContext (ctx ).
@@ -79,33 +89,39 @@ func (c *client) DeviceLookup(ctx context.Context, tenantID, name string) (*mode
79
89
SetResult (& device ).
80
90
Get (c .Config .APIBaseURL + "/internal/device/lookup" )
81
91
if err != nil {
82
- return nil , ErrConnectionFailed
92
+ return nil , errors . Join ( ErrDeviceRequestFailed , err )
83
93
}
84
94
85
- switch resp .StatusCode () {
86
- case http .StatusOK :
87
- return device , nil
88
- case http .StatusNotFound :
89
- return nil , ErrNotFound
90
- case http .StatusForbidden :
91
- return nil , ErrForbidden
92
- default :
93
- return nil , ErrUnknown
95
+ if resp .StatusCode () != http .StatusOK {
96
+ return nil , ErrDeviceLookupFailed
94
97
}
98
+
99
+ return device , nil
95
100
}
96
101
102
+ var ErrListDevicesFailed = errors .New ("list devices failed" )
103
+
97
104
func (c * client ) ListDevices (ctx context.Context ) ([]models.Device , error ) {
98
105
list := []models.Device {}
99
106
100
- _ , err := c .http .
107
+ resp , err := c .http .
101
108
R ().
102
109
SetContext (ctx ).
103
110
SetResult (list ).
104
111
Get (c .Config .APIBaseURL + "/api/devices" )
112
+ if err != nil {
113
+ return nil , errors .Join (ErrDeviceRequestFailed , err )
114
+ }
115
+
116
+ if resp .StatusCode () != http .StatusOK {
117
+ return nil , ErrListDevicesFailed
118
+ }
105
119
106
- return list , err
120
+ return list , nil
107
121
}
108
122
123
+ var ErrGetDeviceFailed = errors .New ("get device failed" )
124
+
109
125
func (c * client ) GetDevice (ctx context.Context , uid string ) (* models.Device , error ) {
110
126
device := new (models.Device )
111
127
resp , err := c .http .
@@ -114,17 +130,14 @@ func (c *client) GetDevice(ctx context.Context, uid string) (*models.Device, err
114
130
SetResult (& device ).
115
131
Get (c .Config .APIBaseURL + "/api/devices/{uid}" )
116
132
if err != nil {
117
- return nil , ErrConnectionFailed
133
+ return nil , errors . Join ( ErrDeviceRequestFailed , err )
118
134
}
119
135
120
- switch resp .StatusCode () {
121
- case 400 :
122
- return nil , ErrNotFound
123
- case 200 :
124
- return device , nil
125
- default :
126
- return nil , ErrUnknown
136
+ if resp .StatusCode () != http .StatusOK {
137
+ return nil , ErrGetDeviceFailed
127
138
}
139
+
140
+ return device , nil
128
141
}
129
142
130
143
type WebEndpoint struct {
@@ -139,26 +152,26 @@ type WebEndpoint struct {
139
152
CreatedAt time.Time `json:"time" bson:"time"`
140
153
}
141
154
155
+ var (
156
+ ErrWebEndpointRequestFailed = errors .New ("web endpoint request failed" )
157
+ ErrWebEndpointForbidden = errors .New ("web endpoint access forbidden" )
158
+ )
159
+
142
160
func (c * client ) LookupWebEndpoints (ctx context.Context , address string ) (* WebEndpoint , error ) {
143
- var tunnel * WebEndpoint
161
+ var endpoint * WebEndpoint
144
162
resp , err := c .http .
145
163
R ().
146
164
SetContext (ctx ).
147
165
SetPathParam ("address" , address ).
148
- SetResult (& tunnel ).
166
+ SetResult (& endpoint ).
149
167
Get (c .Config .EnterpriseBaseURL + "/internal/web-endpoints/{address}" )
150
168
if err != nil {
151
- return nil , ErrConnectionFailed
169
+ return nil , errors . Join ( ErrWebEndpointRequestFailed , err )
152
170
}
153
171
154
- switch resp .StatusCode () {
155
- case 404 :
156
- return nil , ErrNotFound
157
- case 403 :
158
- return nil , ErrForbidden
159
- case 200 :
160
- return tunnel , nil
161
- default :
162
- return nil , ErrUnknown
172
+ if resp .StatusCode () != http .StatusOK {
173
+ return nil , ErrWebEndpointForbidden
163
174
}
175
+
176
+ return endpoint , nil
164
177
}
0 commit comments