2023-08-28 14:51:31 +08:00

175 lines
5.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*******************************************************************************
* 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
//}