1package structs
2
3import (
4	"time"
5
6	"github.com/hashicorp/consul/api"
7	"github.com/hashicorp/consul/types"
8)
9
10// CheckDefinition is used to JSON decode the Check definitions
11type CheckDefinition struct {
12	ID        types.CheckID
13	Name      string
14	Notes     string
15	ServiceID string
16	Token     string
17	Status    string
18
19	// Copied fields from CheckType without the fields
20	// already present in CheckDefinition:
21	//
22	//   ID (CheckID), Name, Status, Notes
23	//
24	ScriptArgs                     []string
25	HTTP                           string
26	Header                         map[string][]string
27	Method                         string
28	TCP                            string
29	Interval                       time.Duration
30	DockerContainerID              string
31	Shell                          string
32	GRPC                           string
33	GRPCUseTLS                     bool
34	TLSSkipVerify                  bool
35	AliasNode                      string
36	AliasService                   string
37	Timeout                        time.Duration
38	TTL                            time.Duration
39	DeregisterCriticalServiceAfter time.Duration
40}
41
42func (c *CheckDefinition) HealthCheck(node string) *HealthCheck {
43	health := &HealthCheck{
44		Node:      node,
45		CheckID:   c.ID,
46		Name:      c.Name,
47		Status:    api.HealthCritical,
48		Notes:     c.Notes,
49		ServiceID: c.ServiceID,
50	}
51	if c.Status != "" {
52		health.Status = c.Status
53	}
54	if health.CheckID == "" && health.Name != "" {
55		health.CheckID = types.CheckID(health.Name)
56	}
57	return health
58}
59
60func (c *CheckDefinition) CheckType() *CheckType {
61	return &CheckType{
62		CheckID: c.ID,
63		Name:    c.Name,
64		Status:  c.Status,
65		Notes:   c.Notes,
66
67		ScriptArgs:                     c.ScriptArgs,
68		AliasNode:                      c.AliasNode,
69		AliasService:                   c.AliasService,
70		HTTP:                           c.HTTP,
71		GRPC:                           c.GRPC,
72		GRPCUseTLS:                     c.GRPCUseTLS,
73		Header:                         c.Header,
74		Method:                         c.Method,
75		TCP:                            c.TCP,
76		Interval:                       c.Interval,
77		DockerContainerID:              c.DockerContainerID,
78		Shell:                          c.Shell,
79		TLSSkipVerify:                  c.TLSSkipVerify,
80		Timeout:                        c.Timeout,
81		TTL:                            c.TTL,
82		DeregisterCriticalServiceAfter: c.DeregisterCriticalServiceAfter,
83	}
84}
85