forked from cloudfoundry/bosh-agent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
agent_client.go
80 lines (67 loc) · 2.16 KB
/
agent_client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package integrationagentclient
import (
"encoding/json"
"time"
"github.com/cloudfoundry/bosh-agent/agent/action"
"github.com/cloudfoundry/bosh-agent/agentclient/http"
"github.com/cloudfoundry/bosh-agent/settings"
bosherr "github.com/cloudfoundry/bosh-utils/errors"
"github.com/cloudfoundry/bosh-utils/httpclient"
boshlog "github.com/cloudfoundry/bosh-utils/logger"
)
type IntegrationAgentClient struct {
*http.AgentClient
}
func NewIntegrationAgentClient(
endpoint string,
directorID string,
getTaskDelay time.Duration,
toleratedErrorCount int,
httpClient *httpclient.HTTPClient,
logger boshlog.Logger,
) *IntegrationAgentClient {
return &IntegrationAgentClient{
AgentClient: http.NewAgentClient(endpoint, directorID, getTaskDelay, toleratedErrorCount, httpClient, logger).(*http.AgentClient),
}
}
type exception struct {
Message string
}
type SSHResponse struct {
action.SSHResult
Exception *exception
}
func (r *SSHResponse) ServerError() error {
if r.Exception != nil {
return bosherr.Errorf("Agent responded with error: %s", r.Exception.Message)
}
return nil
}
func (r *SSHResponse) Unmarshal(message []byte) error {
return json.Unmarshal(message, r)
}
func (c *IntegrationAgentClient) FetchLogs(logType string, filters []string) (map[string]interface{}, error) {
responseRaw, err := c.SendAsyncTaskMessage("fetch_logs", []interface{}{logType, filters})
if err != nil {
return nil, bosherr.WrapError(err, "Fetching logs from agent")
}
responseValue, ok := responseRaw.(map[string]interface{})
if !ok {
return nil, bosherr.Errorf("Unable to parse fetch_logs response value: %#v", responseRaw)
}
if err != nil {
return nil, bosherr.WrapError(err, "Sending 'fetch_logs' to the agent")
}
return responseValue, err
}
func (c *IntegrationAgentClient) SSH(cmd string, params action.SSHParams) error {
err := c.AgentRequest.Send("ssh", []interface{}{cmd, params}, &SSHResponse{})
if err != nil {
return bosherr.WrapError(err, "Sending 'ssh' to the agent")
}
return nil
}
func (c *IntegrationAgentClient) UpdateSettings(settings settings.UpdateSettings) error {
_, err := c.SendAsyncTaskMessage("update_settings", []interface{}{settings})
return err
}