// 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
}