iot_server/internal/tools/agentclient/agentclient.go

175 lines
5.3 KiB
Go
Raw Normal View History

2023-08-28 06:49:44 +00:00
/*******************************************************************************
* Copyright 2017.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*******************************************************************************/
package agentclient
import (
"context"
"encoding/json"
"github.com/winc-link/hummingbird/internal/dtos"
"github.com/winc-link/hummingbird/internal/pkg/constants"
"github.com/winc-link/hummingbird/internal/pkg/errort"
"github.com/winc-link/hummingbird/internal/pkg/httphelper"
"net/url"
)
const (
ApiTerminalRoute = "/api/v1/terminal"
ApiServicesRoute = "/api/v1/services"
)
type agentClient struct {
baseUrl string
}
func New(baseUrl string) AgentClient {
return &agentClient{
baseUrl: baseUrl,
}
}
func (c agentClient) GetGps(ctx context.Context) (dtos.Gps, error) {
res := dtos.Gps{}
commonRes := httphelper.CommonResponse{}
err := httphelper.GetRequest(ctx, &commonRes, c.baseUrl, "/api/v1/gps", nil)
if err != nil {
return res, err
}
e := httphelper.CommResToSpecial(commonRes.Result, &res)
if e != nil {
return res, errort.NewCommonEdgeX(errort.DefaultSystemError, "res type is not gps", nil)
}
return res, nil
}
func (c agentClient) AddServiceMonitor(ctx context.Context, stats dtos.ServiceStats) error {
commonRes := httphelper.CommonResponse{}
return httphelper.PostRequest(ctx, &commonRes, c.baseUrl+"/api/v1/service/monitor", stats)
}
func (c *agentClient) DeleteServiceMonitor(ctx context.Context, serviceName string) error {
commonRes := httphelper.CommonResponse{}
var params = url.Values{}
params.Set("service_name", serviceName)
return httphelper.DeleteRequest(ctx, &commonRes, c.baseUrl, "/api/v1/service/monitor", params)
}
func (c *agentClient) GetAllDriverMonitor(ctx context.Context) ([]dtos.ServiceStats, error) {
var list []dtos.ServiceStats
commonRes := httphelper.CommonResponse{}
err := httphelper.GetRequest(ctx, &commonRes, c.baseUrl, "/api/v1/driver/monitor", nil)
if err != nil {
return list, err
}
e := httphelper.CommResToSpecial(commonRes.Result, &list)
if e != nil {
return list, errort.NewCommonEdgeX(errort.DefaultSystemError, "res type is not gps", nil)
}
return list, nil
}
func (c *agentClient) RestartGateway(ctx context.Context) error {
commonRes := httphelper.CommonResponse{}
err := httphelper.PostRequest(ctx, &commonRes, c.baseUrl+"/api/v1/restart", nil)
if err != nil {
return err
}
return nil
}
func (c *agentClient) OperationService(ctx context.Context, op dtos.Operation) error {
commonRes := httphelper.CommonResponse{}
err := httphelper.PostRequest(ctx, &commonRes, c.baseUrl+"/api/v1/operation", op)
if err != nil {
return err
}
return nil
}
func (c *agentClient) GetAllAppServiceMonitor(ctx context.Context) ([]dtos.ServiceStats, error) {
var list []dtos.ServiceStats
commonRes := httphelper.CommonResponse{}
err := httphelper.GetRequest(ctx, &commonRes, c.baseUrl, "/api/v1/app_service/monitor", nil)
if err != nil {
return list, err
}
e := httphelper.CommResToSpecial(commonRes.Result, &list)
if e != nil {
return list, errort.NewCommonEdgeX(errort.DefaultSystemError, "res type is not gps", nil)
}
return list, nil
}
func (c agentClient) GetAllServices(ctx context.Context) (res dtos.ServicesStats, err error) {
response := httphelper.CommonResponse{}
err = httphelper.GetRequest(ctx, &response, c.baseUrl, ApiServicesRoute, nil)
if err != nil {
return res, err
}
resultByte, _ := json.Marshal(response.Result)
errJson := json.Unmarshal(resultByte, &res)
if errJson != nil {
return res, errJson
}
return res, nil
}
func (c agentClient) Exec(ctx context.Context, req dtos.AgentRequest) (res dtos.AgentResponse, err error) {
if req.TimeoutSeconds == 0 {
req.TimeoutSeconds = constants.DefaultAgentReqTimeout
}
commonRes := httphelper.CommonResponse{}
err = httphelper.PostRequest(ctx, &commonRes, c.baseUrl+ApiTerminalRoute, req)
if err != nil {
return res, err
}
resultByte, _ := json.Marshal(commonRes.Result)
errJson := json.Unmarshal(resultByte, &res)
if errJson != nil {
return res, errJson
}
return res, nil
}
// 重置网关-并重启
func (c agentClient) ResetGateway(ctx context.Context) error {
commonRes := httphelper.CommonResponse{}
err := httphelper.PostRequest(ctx, &commonRes, c.baseUrl+"/api/v1/reset-gateway", nil)
if err != nil {
return err
}
return nil
}
//TODO: 重新构造一下Response返回agent的报错信息
//func (c *agentClient) ExecuteOTAUpgrade(ctx context.Context, pid, version string) (httphelper.CommonResponse, error) {
// upgradeReq := dtos.AgentOTAUpgradeReq{
// Pid: pid,
// Version: version,
// TimeoutSeconds: constants.AgentDownloadOTAFirmTimeout,
// }
//
// commonRes := httphelper.CommonResponse{}
// err := httphelper.PostRequest(ctx, &commonRes, c.baseUrl+"/api/v1/ota/upgrade", upgradeReq)
// if err != nil {
// return commonRes, err
// }
//
// return commonRes, nil
//}