api

package
v0.0.0-...-f0e7cc0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 21, 2017 License: Apache-2.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// All stands for collecting logs from all discovered nodes.
	All = "all"

	// Masters stand for collecting from discovered master nodes.
	Masters = "masters"

	// Agents stand for collecting from discovered agent/agent_public nodes.
	Agents = "agents"
)
View Source
const (
	// MasterRole DC/OS role for a master.
	MasterRole = dcos.RoleMaster

	// AgentRole DC/OS role for an agent.
	AgentRole = dcos.RoleAgent

	// AgentPublicRole DC/OS role for a public agent.
	AgentPublicRole = dcos.RoleAgentPublic
)
View Source
const BaseRoute string = "/system/health/v1"

BaseRoute a base dcos-diagnostics endpoint location.

Variables

This section is empty.

Functions

func NewHTTPClient

func NewHTTPClient(timeout time.Duration, transport http.RoundTripper) *http.Client

NewHTTPClient creates a new instance of http.Client

func NewRouter

func NewRouter(dt *Dt) *mux.Router

NewRouter returns a new *mux.Router with loaded routes.

func StartPullWithInterval

func StartPullWithInterval(dt *Dt)

StartPullWithInterval will start to pull a DC/OS cluster health status

Types

type CommandProvider

type CommandProvider struct {
	Command []string
	Role    []string
	// contains filtered or unexported fields
}

CommandProvider is a local command to execute.

type DCOSHelper

type DCOSHelper interface {
	// open dbus connection
	InitializeDBUSConnection() error

	// close dbus connection
	CloseDBUSConnection() error

	// function to get Connection.GetUnitProperties(pname)
	// returns a maps of properties https://github.com/coreos/go-systemd/blob/master/dbus/methods.go#L176
	GetUnitProperties(string) (map[string]interface{}, error)

	// A wrapper to /opt/mesosphere/bin/detect_ip script
	// should return empty string if script fails.
	DetectIP() (string, error)

	// get system's hostname
	GetHostname() (string, error)

	// Detect node role: master/agent
	GetNodeRole() (string, error)

	// Get DC/OS systemd units on a system
	GetUnitNames() ([]string, error)

	// Get journal output
	GetJournalOutput(string) (string, error)

	// Get mesos node id, first argument is a function to determine a role.
	GetMesosNodeID() (string, error)

	// Get makes HTTP GET request, return read arrays of bytes
	Get(string, time.Duration) ([]byte, int, error)

	// Post makes HTTP GET request, return read arrays of bytes
	Post(string, time.Duration) ([]byte, int, error)

	// LookupMaster will lookup a masters in DC/OS cluster.
	// Initial lookup will be done by making HTTP GET request to exhibitor.If GET request fails, the next lookup
	// will failover to history service for one minute, it this fails or no nodes found, masters will be looked up
	// in history service for last hour.
	GetMasterNodes() ([]Node, error)
	//
	//// GetAgentsFromMaster will lookup agents in DC/OS cluster.
	GetAgentNodes() ([]Node, error)

	// Get timestamp
	GetTimestamp() time.Time
}

DCOSHelper DC/OS specific tools interface.

type DCOSTools

type DCOSTools struct {
	sync.Mutex

	ExhibitorURL string
	Role         string
	ForceTLS     bool
	NodeInfo     nodeutil.NodeInfo
	Transport    http.RoundTripper
	// contains filtered or unexported fields
}

DCOSTools is implementation of DCOSHelper interface.

func (*DCOSTools) CloseDBUSConnection

func (st *DCOSTools) CloseDBUSConnection() error

CloseDBUSConnection closes a dbus connection.

func (*DCOSTools) DetectIP

func (st *DCOSTools) DetectIP() (string, error)

DetectIP returns a detected IP by running /opt/mesosphere/bin/detect_ip. It will run only once and cache the result. When the function is called again, ip will be taken from cache.

func (*DCOSTools) Get

func (st *DCOSTools) Get(url string, timeout time.Duration) (body []byte, httpResponseCode int, err error)

Get HTTP request.

func (*DCOSTools) GetAgentNodes

func (st *DCOSTools) GetAgentNodes() (nodes []Node, err error)

GetAgentNodes finds DC/OS agents.

func (*DCOSTools) GetHostname

func (st *DCOSTools) GetHostname() (string, error)

GetHostname return a localhost hostname.

func (*DCOSTools) GetJournalOutput

func (st *DCOSTools) GetJournalOutput(unit string) (string, error)

GetJournalOutput returns last 50 lines of journald command output for a specific systemd Unit.

func (*DCOSTools) GetMasterNodes

func (st *DCOSTools) GetMasterNodes() (nodesResponse []Node, err error)

GetMasterNodes finds DC/OS masters.

func (*DCOSTools) GetMesosNodeID

func (st *DCOSTools) GetMesosNodeID() (string, error)

GetMesosNodeID return a mesos node id.

func (*DCOSTools) GetNodeRole

func (st *DCOSTools) GetNodeRole() (string, error)

GetNodeRole returns a nodes role. It will run only once and cache the result. When the function is called again, ip will be taken from cache.

func (*DCOSTools) GetTimestamp

func (st *DCOSTools) GetTimestamp() time.Time

GetTimestamp return time.Now()

func (*DCOSTools) GetUnitNames

func (st *DCOSTools) GetUnitNames() (units []string, err error)

GetUnitNames read a directory /etc/systemd/system/dcos.target.wants and return a list of found systemd units.

func (*DCOSTools) GetUnitProperties

func (st *DCOSTools) GetUnitProperties(pname string) (result map[string]interface{}, err error)

GetUnitProperties return a map of systemd Unit properties received from dbus.

func (*DCOSTools) InitializeDBUSConnection

func (st *DCOSTools) InitializeDBUSConnection() (err error)

InitializeDBUSConnection opens a dbus connection. The connection is available via st.dcon

func (*DCOSTools) Post

func (st *DCOSTools) Post(url string, timeout time.Duration) (body []byte, httpResponseCode int, err error)

Post HTTP request.

type DiagnosticsJob

type DiagnosticsJob struct {
	sync.Mutex

	Transport             http.RoundTripper `json:"-"`
	Running               bool              `json:"is_running"`
	Status                string            `json:"status"`
	Errors                []string          `json:"errors"`
	LastBundlePath        string            `json:"last_bundle_dir"`
	JobStarted            time.Time         `json:"job_started"`
	JobEnded              time.Time         `json:"job_ended"`
	JobDuration           time.Duration     `json:"job_duration"`
	JobProgressPercentage float32           `json:"job_progress_percentage"`
	// contains filtered or unexported fields
}

DiagnosticsJob is the main structure for a logs collection job.

func (*DiagnosticsJob) Init

func (j *DiagnosticsJob) Init(cfg *config.Config, DCOSTools DCOSHelper) error

Init will prepare diagnostics job, read config files etc.

type Dt

type Dt struct {
	Cfg               *config.Config
	DtDCOSTools       DCOSHelper
	DtDiagnosticsJob  *DiagnosticsJob
	RunPullerChan     chan bool
	RunPullerDoneChan chan bool
	SystemdUnits      *SystemdUnits
	MR                *MonitoringResponse
}

Dt is a struct of dependencies used in dcos-diagnostics code. There are 2 implementations, the one runs on a real system and the one used for testing.

type FileProvider

type FileProvider struct {
	Location string
	Role     []string
	// contains filtered or unexported fields
}

FileProvider is a local file provider.

type HTTPProvider

type HTTPProvider struct {
	Port     int
	URI      string
	FileName string
	Role     []string
}

HTTPProvider is a provider for fetching an HTTP endpoint.

type HTTPRequester

type HTTPRequester interface {
	Init(*config.Config, DCOSHelper) error
	Do(*http.Request, time.Duration) (*http.Response, error)
	Transport() http.RoundTripper
}

HTTPRequester is an interface to make HTTP requests

type HealthResponseValues

type HealthResponseValues struct {
	UnitID     string `json:"id"`
	UnitHealth int    `json:"health"`
	UnitOutput string `json:"output"`
	UnitTitle  string `json:"description"`
	Help       string `json:"help"`
	PrettyName string `json:"name"`
}

HealthResponseValues is a health values json response.

type LogProviders

type LogProviders struct {
	HTTPEndpoints []HTTPProvider
	LocalFiles    []FileProvider
	LocalCommands []CommandProvider
}

LogProviders a structure defines a list of Providers

type MonitoringResponse

type MonitoringResponse struct {
	sync.RWMutex

	Units       map[string]Unit
	Nodes       map[string]Node
	UpdatedTime time.Time
}

MonitoringResponse top level global variable to store the entire units/nodes status tree.

func (*MonitoringResponse) GetAllUnits

func (mr *MonitoringResponse) GetAllUnits() UnitsResponseJSONStruct

GetAllUnits returns all systemd units from status tree.

func (*MonitoringResponse) GetLastUpdatedTime

func (mr *MonitoringResponse) GetLastUpdatedTime() string

GetLastUpdatedTime returns timestamp of latest updated monitoring response.

func (*MonitoringResponse) GetMasterAgentNodes

func (mr *MonitoringResponse) GetMasterAgentNodes() ([]Node, []Node, error)

GetMasterAgentNodes returns a list of master and agent nodes available in status tree.

func (*MonitoringResponse) GetNodeByID

func (mr *MonitoringResponse) GetNodeByID(nodeIP string) (NodeResponseFieldsStruct, error)

GetNodeByID returns a node by IP address from a status tree.

func (*MonitoringResponse) GetNodeUnitByNodeIDUnitID

func (mr *MonitoringResponse) GetNodeUnitByNodeIDUnitID(nodeIP string, unitID string) (HealthResponseValues, error)

GetNodeUnitByNodeIDUnitID returns a Unit status by node IP address and Unit ID.

func (*MonitoringResponse) GetNodeUnitsID

func (mr *MonitoringResponse) GetNodeUnitsID(nodeIP string) (UnitsResponseJSONStruct, error)

GetNodeUnitsID returns a Unit status for a given node from status tree.

func (*MonitoringResponse) GetNodes

GetNodes gets all available nodes in status tree.

func (*MonitoringResponse) GetNodesForUnit

func (mr *MonitoringResponse) GetNodesForUnit(unitName string) (NodesResponseJSONStruct, error)

GetNodesForUnit get all hosts for a specific Unit available in status tree.

func (*MonitoringResponse) GetSpecificNodeForUnit

func (mr *MonitoringResponse) GetSpecificNodeForUnit(unitName string, nodeIP string) (NodeResponseFieldsWithErrorStruct, error)

GetSpecificNodeForUnit gets a specific node for a given Unit from a status tree.

func (*MonitoringResponse) GetUnit

func (mr *MonitoringResponse) GetUnit(unitName string) (UnitResponseFieldsStruct, error)

GetUnit gets a specific Unit from a status tree.

func (*MonitoringResponse) UpdateMonitoringResponse

func (mr *MonitoringResponse) UpdateMonitoringResponse(r *MonitoringResponse)

UpdateMonitoringResponse will update the status tree.

type Node

type Node struct {
	Leader  bool
	Role    string
	IP      string
	Host    string
	Health  int
	Output  map[string]string
	Units   []Unit `json:",omitempty"`
	MesosID string
}

Node for DC/OS node.

type NodeResponseFieldsStruct

type NodeResponseFieldsStruct struct {
	HostIP     string `json:"host_ip"`
	NodeHealth int    `json:"health"`
	NodeRole   string `json:"role"`
}

NodeResponseFieldsStruct contains a response from a node.

type NodeResponseFieldsWithErrorStruct

type NodeResponseFieldsWithErrorStruct struct {
	HostIP     string `json:"host_ip"`
	NodeHealth int    `json:"health"`
	NodeRole   string `json:"role"`
	UnitOutput string `json:"output"`
	Help       string `json:"help"`
}

NodeResponseFieldsWithErrorStruct contains node response with errors.

type NodesNotFoundError

type NodesNotFoundError struct {
	// contains filtered or unexported fields
}

NodesNotFoundError is a custom error called when nodes are not found.

func (NodesNotFoundError) Error

func (n NodesNotFoundError) Error() string

type NodesResponseJSONStruct

type NodesResponseJSONStruct struct {
	Array []*NodeResponseFieldsStruct `json:"nodes"`
}

NodesResponseJSONStruct contains an array of responses from nodes.

type SystemdUnits

type SystemdUnits struct {
	sync.Mutex
}

SystemdUnits used to make GetUnitsProperties thread safe.

func (*SystemdUnits) GetUnits

func (s *SystemdUnits) GetUnits(tools DCOSHelper) (allUnits []HealthResponseValues, err error)

GetUnits returns a list of found unit properties.

func (*SystemdUnits) GetUnitsProperties

func (s *SystemdUnits) GetUnitsProperties(cfg *config.Config, tools DCOSHelper) (healthReport UnitsHealthResponseJSONStruct, err error)

GetUnitsProperties return a structured units health response of UnitsHealthResponseJsonStruct type.

type Unit

type Unit struct {
	UnitName   string
	Nodes      []Node `json:",omitempty"`
	Health     int
	Title      string
	Timestamp  time.Time
	PrettyName string
}

Unit for stands for systemd unit.

type UnitPropertiesResponse

type UnitPropertiesResponse struct {
	ID             string `json:"Id"`
	LoadState      string
	ActiveState    string
	SubState       string
	Description    string
	ExecMainStatus int

	InactiveExitTimestampMonotonic  uint64
	ActiveEnterTimestampMonotonic   uint64
	ActiveExitTimestampMonotonic    uint64
	InactiveEnterTimestampMonotonic uint64
}

UnitPropertiesResponse is a structure to unmarshal dbus.GetunitProperties response

func (*UnitPropertiesResponse) CheckUnitHealth

func (u *UnitPropertiesResponse) CheckUnitHealth() (int, string, error)

CheckUnitHealth tells if the Unit is healthy

type UnitResponseFieldsStruct

type UnitResponseFieldsStruct struct {
	UnitID     string `json:"id"`
	PrettyName string `json:"name"`
	UnitHealth int    `json:"health"`
	UnitTitle  string `json:"description"`
}

UnitResponseFieldsStruct contains systemd unit health report.

type UnitsHealthResponseJSONStruct

type UnitsHealthResponseJSONStruct struct {
	Array       []HealthResponseValues `json:"units"`
	Hostname    string                 `json:"hostname"`
	IPAddress   string                 `json:"ip"`
	DcosVersion string                 `json:"dcos_version"`
	Role        string                 `json:"node_role"`
	MesosID     string                 `json:"mesos_id"`
	TdtVersion  string                 `json:"dcos_diagnostics_version"`
}

UnitsHealthResponseJSONStruct json response /system/health/v1

type UnitsResponseJSONStruct

type UnitsResponseJSONStruct struct {
	Array []UnitResponseFieldsStruct `json:"units"`
}

UnitsResponseJSONStruct contains health overview, collected from all hosts

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL