Skip to content

Commit a29e3d2

Browse files
committed
wip:handlers
1 parent b016145 commit a29e3d2

File tree

4 files changed

+251
-515
lines changed

4 files changed

+251
-515
lines changed

pkg/handlers/handlers.go

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
package handlers
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
8+
"github.com/threefoldtech/tfgrid-sdk-go/messenger"
9+
"github.com/threefoldtech/zosbase/pkg/api"
10+
"github.com/threefoldtech/zosbase/pkg/gridtypes"
11+
)
12+
13+
type RpcHandler struct {
14+
api *api.API
15+
}
16+
17+
// NewRpcHandler creates a new RpcHandler instance with the provided API.
18+
func NewRpcHandler(api *api.API) *RpcHandler {
19+
return &RpcHandler{
20+
api: api,
21+
}
22+
}
23+
24+
func RegisterHandlers(s *messenger.JSONRPCServer, r *RpcHandler) {
25+
s.RegisterHandler("system.version", r.handleSystemVersion)
26+
s.RegisterHandler("system.dmi", r.handleSystemDMI)
27+
s.RegisterHandler("system.hypervisor", r.handleSystemHypervisor)
28+
s.RegisterHandler("system.diagnostics", r.handleSystemDiagnostics)
29+
s.RegisterHandler("system.features", r.handleSystemNodeFeatures)
30+
31+
s.RegisterHandler("monitor.speed", r.handlePerfSpeed)
32+
s.RegisterHandler("monitor.health", r.handlePerfHealth)
33+
s.RegisterHandler("monitor.publicip", r.handlePerfPublicIp)
34+
s.RegisterHandler("monitor.benchmark", r.handlePerfBenchmark)
35+
s.RegisterHandler("monitor.all", r.handlePerfAll)
36+
37+
s.RegisterHandler("network.wg_ports", r.handleNetworkWGPorts)
38+
s.RegisterHandler("network.public_config", r.handleNetworkPublicConfig)
39+
s.RegisterHandler("network.has_ipv6", r.handleNetworkHasIPv6)
40+
s.RegisterHandler("network.public_ips", r.handleNetworkPublicIPs)
41+
s.RegisterHandler("network.private_ips", r.handleNetworkPrivateIPs)
42+
s.RegisterHandler("network.interfaces", r.handleNetworkInterfaces)
43+
s.RegisterHandler("network.set_public_nic", r.handleAdminSetPublicNIC)
44+
s.RegisterHandler("network.get_public_nic", r.handleAdminGetPublicNIC)
45+
// s.RegisterHandler("network.admin.interfaces", r.handleAdminInterfaces)
46+
47+
s.RegisterHandler("deployment.deploy", r.handleDeploymentDeploy)
48+
s.RegisterHandler("deployment.update", r.handleDeploymentUpdate)
49+
s.RegisterHandler("deployment.get", r.handleDeploymentGet)
50+
s.RegisterHandler("deployment.list", r.handleDeploymentList)
51+
s.RegisterHandler("deployment.changes", r.handleDeploymentChanges)
52+
// s.RegisterHandler("deployment.delete", r.handleDeploymentDelete)
53+
54+
s.RegisterHandler("gpu.list", r.handleGpuList)
55+
s.RegisterHandler("storage.pools", r.handleStoragePools)
56+
s.RegisterHandler("statistics", r.handleStatistics)
57+
s.RegisterHandler("location.get", r.handleLocationGet)
58+
// s.RegisterHandler("vm.logs", r.handleVmLogs)
59+
60+
}
61+
62+
func extractObject(params json.RawMessage, obj interface{}) error {
63+
if err := json.Unmarshal(params, obj); err != nil {
64+
return fmt.Errorf("invalid object parameter: %w", err)
65+
}
66+
return nil
67+
}
68+
69+
func (r *RpcHandler) handleSystemVersion(ctx context.Context, params json.RawMessage) (interface{}, error) {
70+
return r.api.SystemVersion(ctx)
71+
}
72+
73+
func (r *RpcHandler) handleSystemDMI(ctx context.Context, params json.RawMessage) (interface{}, error) {
74+
return r.api.SystemDMI(ctx)
75+
}
76+
77+
func (r *RpcHandler) handleSystemHypervisor(ctx context.Context, params json.RawMessage) (interface{}, error) {
78+
return r.api.SystemHypervisor(ctx)
79+
}
80+
81+
func (r *RpcHandler) handleSystemDiagnostics(ctx context.Context, params json.RawMessage) (interface{}, error) {
82+
return r.api.SystemDiagnostics(ctx)
83+
}
84+
85+
func (r *RpcHandler) handleSystemNodeFeatures(ctx context.Context, params json.RawMessage) (interface{}, error) {
86+
return r.api.SystemNodeFeatures(ctx), nil
87+
}
88+
89+
func (r *RpcHandler) handlePerfSpeed(ctx context.Context, params json.RawMessage) (interface{}, error) {
90+
return r.api.PerfSpeed(ctx)
91+
}
92+
93+
func (r *RpcHandler) handlePerfHealth(ctx context.Context, params json.RawMessage) (interface{}, error) {
94+
return r.api.PerfHealth(ctx)
95+
}
96+
97+
func (r *RpcHandler) handlePerfPublicIp(ctx context.Context, params json.RawMessage) (interface{}, error) {
98+
return r.api.PerfPublicIp(ctx)
99+
}
100+
101+
func (r *RpcHandler) handlePerfBenchmark(ctx context.Context, params json.RawMessage) (interface{}, error) {
102+
return r.api.PerfBenchmark(ctx)
103+
}
104+
105+
func (r *RpcHandler) handlePerfAll(ctx context.Context, params json.RawMessage) (interface{}, error) {
106+
return r.api.PerfAll(ctx)
107+
}
108+
109+
func (r *RpcHandler) handleGpuList(ctx context.Context, params json.RawMessage) (interface{}, error) {
110+
return r.api.GpuList(ctx)
111+
}
112+
113+
func (r *RpcHandler) handleStoragePools(ctx context.Context, params json.RawMessage) (interface{}, error) {
114+
return r.api.StoragePoolsHandler(ctx)
115+
}
116+
117+
func (r *RpcHandler) handleNetworkWGPorts(ctx context.Context, params json.RawMessage) (interface{}, error) {
118+
return r.api.NetworkWGPorts(ctx)
119+
}
120+
121+
func (r *RpcHandler) handleNetworkPublicConfig(ctx context.Context, params json.RawMessage) (interface{}, error) {
122+
return r.api.NetworkPublicConfigGet(ctx, nil)
123+
}
124+
125+
func (r *RpcHandler) handleNetworkHasIPv6(ctx context.Context, params json.RawMessage) (interface{}, error) {
126+
return r.api.NetworkHasIPv6(ctx)
127+
}
128+
129+
func (r *RpcHandler) handleNetworkPublicIPs(ctx context.Context, params json.RawMessage) (interface{}, error) {
130+
return r.api.NetworkListPublicIPs(ctx)
131+
}
132+
133+
func (r *RpcHandler) handleNetworkPrivateIPs(ctx context.Context, params json.RawMessage) (interface{}, error) {
134+
type networkParams struct {
135+
NetworkName string `json:"network_name"`
136+
}
137+
138+
var p networkParams
139+
if err := extractObject(params, &p); err != nil {
140+
return nil, err
141+
}
142+
143+
return r.api.NetworkListPrivateIPs(ctx, p.NetworkName)
144+
}
145+
146+
func (r *RpcHandler) handleNetworkInterfaces(ctx context.Context, params json.RawMessage) (interface{}, error) {
147+
return r.api.NetworkInterfaces(ctx)
148+
}
149+
150+
func (r *RpcHandler) handleAdminInterfaces(ctx context.Context, params json.RawMessage) (interface{}, error) {
151+
return r.api.AdminInterfaces(ctx)
152+
}
153+
154+
func (r *RpcHandler) handleAdminSetPublicNIC(ctx context.Context, params json.RawMessage) (interface{}, error) {
155+
type deviceParams struct {
156+
Device string `json:"device"`
157+
}
158+
159+
var p deviceParams
160+
if err := extractObject(params, &p); err != nil {
161+
return nil, err
162+
}
163+
164+
return nil, r.api.AdminSetPublicNIC(ctx, p.Device)
165+
}
166+
167+
func (r *RpcHandler) handleAdminGetPublicNIC(ctx context.Context, params json.RawMessage) (interface{}, error) {
168+
return r.api.AdminGetPublicNIC(ctx)
169+
}
170+
171+
func (r *RpcHandler) handleDeploymentDeploy(ctx context.Context, params json.RawMessage) (interface{}, error) {
172+
var deployment gridtypes.Deployment
173+
if err := extractObject(params, &deployment); err != nil {
174+
return nil, err
175+
}
176+
177+
return nil, r.api.DeploymentDeployHandler(ctx, deployment)
178+
}
179+
180+
func (r *RpcHandler) handleDeploymentUpdate(ctx context.Context, params json.RawMessage) (interface{}, error) {
181+
var deployment gridtypes.Deployment
182+
if err := extractObject(params, &deployment); err != nil {
183+
return nil, err
184+
}
185+
186+
return nil, r.api.DeploymentUpdateHandler(ctx, deployment)
187+
}
188+
189+
func (r *RpcHandler) handleDeploymentGet(ctx context.Context, params json.RawMessage) (interface{}, error) {
190+
type contractParams struct {
191+
ContractID uint64 `json:"contract_id"`
192+
}
193+
194+
var p contractParams
195+
if err := extractObject(params, &p); err != nil {
196+
return nil, err
197+
}
198+
199+
return r.api.DeploymentGetHandler(ctx, p.ContractID)
200+
}
201+
202+
func (r *RpcHandler) handleDeploymentList(ctx context.Context, params json.RawMessage) (interface{}, error) {
203+
return r.api.DeploymentListHandler(ctx)
204+
}
205+
206+
func (r *RpcHandler) handleDeploymentChanges(ctx context.Context, params json.RawMessage) (interface{}, error) {
207+
type contractParams struct {
208+
ContractID uint64 `json:"contract_id"`
209+
}
210+
211+
var p contractParams
212+
if err := extractObject(params, &p); err != nil {
213+
return nil, err
214+
}
215+
216+
return r.api.DeploymentChangesHandler(ctx, p.ContractID)
217+
}
218+
219+
func (r *RpcHandler) handleDeploymentDelete(ctx context.Context, params json.RawMessage) (interface{}, error) {
220+
type contractParams struct {
221+
ContractID uint64 `json:"contract_id"`
222+
}
223+
224+
var p contractParams
225+
if err := extractObject(params, &p); err != nil {
226+
return nil, err
227+
}
228+
229+
return nil, r.api.DeploymentDeleteHandler(ctx, p.ContractID)
230+
}
231+
232+
func (r *RpcHandler) handleStatistics(ctx context.Context, params json.RawMessage) (interface{}, error) {
233+
return r.api.Statistics(ctx)
234+
}
235+
236+
func (r *RpcHandler) handleVmLogs(ctx context.Context, params json.RawMessage) (interface{}, error) {
237+
type fileParams struct {
238+
FileName string `json:"file_name"`
239+
}
240+
241+
var p fileParams
242+
if err := extractObject(params, &p); err != nil {
243+
return nil, err
244+
}
245+
246+
return r.api.GetVmLogsHandler(ctx, p.FileName)
247+
}
248+
249+
func (r *RpcHandler) handleLocationGet(ctx context.Context, params json.RawMessage) (interface{}, error) {
250+
return r.api.LocationGet(ctx)
251+
}

0 commit comments

Comments
 (0)