175 lines
5.3 KiB
Go
175 lines
5.3 KiB
Go
/*******************************************************************************
|
||
* 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
|
||
//}
|