func (this *ControlPlaneDao) GetServiceLogs(serviceID string, logs *string) error { glog.V(3).Info("ControlPlaneDao.GetServiceLogs serviceID=", serviceID) var serviceStates []servicestate.ServiceState if err := this.GetServiceStates(serviceID, &serviceStates); err != nil { glog.Errorf("ControlPlaneDao.GetServiceLogs failed: %v", err) return err } if len(serviceStates) == 0 { glog.V(1).Info("Unable to find any running services for service:", serviceID) return nil } serviceState := serviceStates[0] endpoint := fmt.Sprintf("%s:%d", serviceState.HostIP, this.rpcPort) agentClient, err := agent.NewClient(endpoint) if err != nil { glog.Errorf("could not create client to %s", endpoint) return err } defer agentClient.Close() if mylogs, err := agentClient.GetDockerLogs(serviceState.DockerID); err != nil { glog.Errorf("could not get docker logs from agent client: %s", err) return err } else { *logs = mylogs } return nil }
// Opens a connection to the agent if not already connected func (a *api) connectAgent(address string) (*agent.Client, error) { if a.agent == nil { var err error a.agent, err = agent.NewClient(address) if err != nil { return nil, fmt.Errorf("could not create a client to the agent: %s", err) } } return a.agent, nil }
func (this *ControlPlaneDao) GetServiceStateLogs(request dao.ServiceStateRequest, logs *string) error { var serviceState servicestate.ServiceState if err := this.GetServiceState(request, &serviceState); err != nil { glog.Errorf("ControlPlaneDao.GetServiceStateLogs servicestate=%+v err=%s", serviceState, err) return err } endpoint := fmt.Sprintf("%s:%d", serviceState.HostIP, this.rpcPort) agentClient, err := agent.NewClient(endpoint) if err != nil { glog.Errorf("could not create client to %s", endpoint) return err } defer agentClient.Close() if mylogs, err := agentClient.GetDockerLogs(serviceState.DockerID); err != nil { glog.Errorf("could not get docker logs from agent client: %s", err) return err } else { *logs = mylogs } return nil }
//restAddHost adds a Host. Request input is host.Host func restAddHost(w *rest.ResponseWriter, r *rest.Request, ctx *requestContext) { var payload host.Host err := r.DecodeJsonPayload(&payload) if err != nil { glog.V(1).Infof("Could not decode host payload: %v", err) restBadRequest(w, err) return } // Save the pool ID and IP address for later. GetInfo wipes these ipAddr := payload.IPAddr parts := strings.Split(ipAddr, ":") hostIPAddr, err := net.ResolveIPAddr("ip", parts[0]) if err != nil { glog.Errorf("%s could not be resolved", parts[0]) restBadRequest(w, err) return } hostIP := hostIPAddr.IP.String() if len(parts) < 2 { glog.Errorf("rpcport needs to be specified") restBadRequest(w, err) return } rpcPort, err := strconv.Atoi(parts[1]) if err != nil { glog.Errorf("could not convert rpcport %s to int", parts[1]) restBadRequest(w, err) return } agentClient, err := agent.NewClient(payload.IPAddr) // remoteClient, err := serviced.NewAgentClient(payload.IPAddr) if err != nil { glog.Errorf("Could not create connection to host %s: %v", payload.IPAddr, err) restServerError(w, err) return } IPs := []string{} for _, ip := range payload.IPs { IPs = append(IPs, ip.IPAddress) } buildRequest := agent.BuildHostRequest{ IP: hostIP, Port: rpcPort, PoolID: payload.PoolID, } host, err := agentClient.BuildHost(buildRequest) if err != nil { glog.Errorf("Unable to get remote host info: %v", err) restBadRequest(w, err) return } masterClient, err := ctx.getMasterClient() if err != nil { glog.Errorf("Unable to add host: %v", err) restServerError(w, err) return } err = masterClient.AddHost(*host) if err != nil { glog.Errorf("Unable to add host: %v", err) restServerError(w, err) return } glog.V(0).Info("Added host ", host.ID) w.WriteJson(&simpleResponse{"Added host", hostLinks(host.ID)}) }