func retriveHealthCheckPort(service *bridge.Service) int { if portMappings := service.PortMappings(); len(portMappings) > 0 { if checkPort, ok := service.Attrs["check_port"]; ok { if p, err := strconv.Atoi(checkPort); err == nil { if port, ok := portMappings[p]; ok { return port } } } } return service.Port }
func (r *ConsulAdapter) buildCheck(service *bridge.Service) *consulapi.AgentServiceCheck { check := new(consulapi.AgentServiceCheck) if healthcheck := service.HealthCheck(); healthcheck != nil { if healthcheck["protocol"] == "http" { check.HTTP = fmt.Sprintf("http://%s:%s%s", service.IP, healthcheck["port"], healthcheck["path"]) check.Timeout = healthcheck["timeoutInSeconds"] + "s" check.Interval = healthcheck["checkIntervalInSeconds"] + "s" } else if healthcheck["protocol"] == "tcp" { check.TCP = fmt.Sprintf("%s:%s", service.IP, healthcheck["port"]) check.Timeout = healthcheck["timeoutInSeconds"] + "s" check.Interval = healthcheck["checkIntervalInSeconds"] + "s" } else { return nil } } else if path := service.Attrs["check_http"]; path != "" { check.HTTP = fmt.Sprintf("http://%s:%d%s", service.IP, retriveHealthCheckPort(service), path) if timeout := service.Attrs["check_timeout"]; timeout != "" { check.Timeout = timeout } } else if path := service.Attrs["check_https"]; path != "" { check.HTTP = fmt.Sprintf("https://%s:%d%s", service.IP, retriveHealthCheckPort(service), path) if timeout := service.Attrs["check_timeout"]; timeout != "" { check.Timeout = timeout } } else if cmd := service.Attrs["check_cmd"]; cmd != "" { check.Script = fmt.Sprintf("check-cmd %s %s %s", service.Origin.ContainerID[:12], service.Origin.ExposedPort, cmd) } else if script := service.Attrs["check_script"]; script != "" { check.Script = r.interpolateService(script, service) } else if ttl := service.Attrs["check_ttl"]; ttl != "" { check.TTL = ttl } else if tcp := service.Attrs["check_tcp"]; tcp != "" { check.TCP = fmt.Sprintf("%s:%d", service.IP, retriveHealthCheckPort(service)) if timeout := service.Attrs["check_timeout"]; timeout != "" { check.Timeout = timeout } } else { return nil } if check.Interval == "" && (check.Script != "" || check.HTTP != "" || check.TCP != "") { if interval := service.Attrs["check_interval"]; interval != "" { check.Interval = interval } else { check.Interval = DefaultInterval } } return check }