// GetProxyByContainerID returns a proxy object by container ID func GetProxyByContainerID(dbConn *sql.DB, containerID string) (types.Proxy, error) { var rows *sql.Rows proxy := types.Proxy{} var err error queryStr := fmt.Sprintf("select p.usename, p.passwd, p.projectid, p.id, p.containerid, c.name , p.port, p.host, p.databasename from proxy p, container c where p.containerid = c.id and c.id = %s", containerID) logit.Info.Println("GetProxyByContainerID:" + queryStr) rows, err = dbConn.Query(queryStr) if err != nil { return proxy, err } defer rows.Close() for rows.Next() { if err = rows.Scan( &proxy.Usename, &proxy.Passwd, &proxy.ProjectID, &proxy.ID, &proxy.ContainerID, &proxy.ContainerName, &proxy.Port, &proxy.Host, &proxy.Database); err != nil { return proxy, err } } if err = rows.Err(); err != nil { return proxy, err } var unencrypted string unencrypted, err = sec.DecryptPassword(proxy.Passwd) if err != nil { return proxy, err } proxy.Passwd = unencrypted //see if the container is up var resp cpmcontainerapi.StatusResponse resp, err = cpmcontainerapi.StatusClient(proxy.ContainerName) proxy.ContainerStatus = resp.Status if err != nil { return proxy, err } //test the remote host connectivity var hoststatus string hoststatus, err = util.FastPing(proxy.Port, proxy.Host) if err != nil { return proxy, err } if hoststatus == "OFFLINE" { proxy.Status = hoststatus return proxy, err } //test the database port on the remote host proxy.Status, err = GetDatabaseStatus(proxy, containerID) if err != nil { return proxy, err } return proxy, nil }