in traffic_ops/traffic_ops_golang/servercheck/servercheck.go [216:390]
func handleReadServerCheck(inf *api.Info, tx *sql.Tx) ([]tc.GenericServerCheck, error, error, int) {
extensions := make(map[string]string)
// Query Parameters to Database Query column mappings
queryParamsToQueryCols := map[string]dbhelpers.WhereColumnInfo{
"id": dbhelpers.WhereColumnInfo{Column: "servercheck.server", Checker: api.IsInt},
"hostName": dbhelpers.WhereColumnInfo{Column: "server.host_name"},
}
where, orderBy, pagination, queryValues, errs := dbhelpers.BuildWhereAndOrderByAndPagination(inf.Params, queryParamsToQueryCols)
if len(errs) > 0 {
return nil, util.JoinErrs(errs), nil, http.StatusBadRequest
}
// where clause is different for servercheck and server table. Also, it differs for the query param.
var whereSC, whereSI string
if len(inf.Params) < 1 {
whereSI = "WHERE type.name LIKE 'MID%' OR type.name LIKE 'EDGE%' "
whereSC = ""
} else if len(inf.Params) == 1 {
if _, ok := inf.Params["hostName"]; ok {
whereSI = "WHERE (type.name LIKE 'MID%' OR type.name LIKE 'EDGE%') AND server.host_name=:hostName "
whereSC = ""
} else if _, ok = inf.Params["id"]; ok {
whereSI = "WHERE (type.name LIKE 'MID%' OR type.name LIKE 'EDGE%') AND server.id=:id "
whereSC = where
} else {
whereSI = "WHERE type.name LIKE 'MID%' OR type.name LIKE 'EDGE%' "
whereSC = ""
}
} else if len(inf.Params) > 1 {
_, ok := inf.Params["id"]
_, ok1 := inf.Params["hostName"]
if ok && ok1 {
whereSI = "WHERE (type.name LIKE 'MID%' OR type.name LIKE 'EDGE%') AND (server.host_name=:hostName AND server.id=:id)"
whereSC = "WHERE servercheck.server=:id"
} else if ok && !ok1 {
whereSI = "WHERE (type.name LIKE 'MID%' OR type.name LIKE 'EDGE%') AND server.id=:id "
whereSC = "WHERE servercheck.server=:id"
} else if ok1 && !ok {
whereSI = "WHERE (type.name LIKE 'MID%' OR type.name LIKE 'EDGE%') AND server.host_name=:hostName "
whereSC = ""
} else {
whereSI = "WHERE type.name LIKE 'MID%' OR type.name LIKE 'EDGE%' "
whereSC = ""
}
}
extRows, err := tx.Query(extensionsQuery)
if err != nil {
sysErr := fmt.Errorf("querying for extensions: %v", err)
return nil, nil, sysErr, http.StatusInternalServerError
}
for extRows.Next() {
var shortName string
var checkName string
if err = extRows.Scan(&shortName, &checkName); err != nil {
sysErr := fmt.Errorf("scanning extension: %v", err)
return nil, nil, sysErr, http.StatusInternalServerError
}
extensions[shortName] = checkName
}
querySC := serverChecksQuery + whereSC + orderBy + pagination
colRows, err := inf.Tx.NamedQuery(querySC, queryValues)
if err != nil {
sysErr := fmt.Errorf("querying serverchecks columns: %v", err)
return nil, nil, sysErr, http.StatusInternalServerError
}
columns := make(map[int]tc.ServerCheckColumns)
for colRows.Next() {
var cols tc.ServerCheckColumns
if err = colRows.StructScan(&cols); err != nil {
sysErr := fmt.Errorf("scanning server checks columns: %v", err)
return nil, nil, sysErr, http.StatusInternalServerError
}
columns[cols.Server] = cols
}
orderBySI := orderBy + "ORDER BY hostName ASC"
querySI := serverInfoQuery + whereSI + orderBySI + pagination
serverRows, err := inf.Tx.NamedQuery(querySI, queryValues)
if err != nil {
sysErr := fmt.Errorf("querying server info for checks: %v", err)
return nil, nil, sysErr, http.StatusInternalServerError
}
data := []tc.GenericServerCheck{}
for serverRows.Next() {
var serverInfo tc.GenericServerCheck
if err = serverRows.Scan(&serverInfo.HostName, &serverInfo.ID, &serverInfo.Profile, &serverInfo.AdminState, &serverInfo.CacheGroup, &serverInfo.Type, &serverInfo.UpdPending, &serverInfo.RevalPending); err != nil {
sysErr := fmt.Errorf("scanning server info for checks: %v", err)
return nil, nil, sysErr, http.StatusInternalServerError
}
serverCheckCols, ok := columns[serverInfo.ID]
if ok {
serverInfo.Checks = make(map[string]*int)
} else {
data = append(data, serverInfo)
continue
}
for colName, checkName := range extensions {
switch colName {
case "aa":
serverInfo.Checks[checkName] = serverCheckCols.AA
case "ab":
serverInfo.Checks[checkName] = serverCheckCols.AB
case "ac":
serverInfo.Checks[checkName] = serverCheckCols.AC
case "ad":
serverInfo.Checks[checkName] = serverCheckCols.AD
case "ae":
serverInfo.Checks[checkName] = serverCheckCols.AE
case "af":
serverInfo.Checks[checkName] = serverCheckCols.AF
case "ag":
serverInfo.Checks[checkName] = serverCheckCols.AG
case "ah":
serverInfo.Checks[checkName] = serverCheckCols.AH
case "ai":
serverInfo.Checks[checkName] = serverCheckCols.AI
case "aj":
serverInfo.Checks[checkName] = serverCheckCols.AJ
case "ak":
serverInfo.Checks[checkName] = serverCheckCols.AK
case "al":
serverInfo.Checks[checkName] = serverCheckCols.AL
case "am":
serverInfo.Checks[checkName] = serverCheckCols.AM
case "an":
serverInfo.Checks[checkName] = serverCheckCols.AN
case "ao":
serverInfo.Checks[checkName] = serverCheckCols.AO
case "ap":
serverInfo.Checks[checkName] = serverCheckCols.AP
case "aq":
serverInfo.Checks[checkName] = serverCheckCols.AQ
case "ar":
serverInfo.Checks[checkName] = serverCheckCols.AR
case "at":
serverInfo.Checks[checkName] = serverCheckCols.AT
case "au":
serverInfo.Checks[checkName] = serverCheckCols.AU
case "av":
serverInfo.Checks[checkName] = serverCheckCols.AV
case "aw":
serverInfo.Checks[checkName] = serverCheckCols.AW
case "ax":
serverInfo.Checks[checkName] = serverCheckCols.AX
case "ay":
serverInfo.Checks[checkName] = serverCheckCols.AY
case "az":
serverInfo.Checks[checkName] = serverCheckCols.AZ
case "ba":
serverInfo.Checks[checkName] = serverCheckCols.BA
case "bb":
serverInfo.Checks[checkName] = serverCheckCols.BB
case "bc":
serverInfo.Checks[checkName] = serverCheckCols.BC
case "bd":
serverInfo.Checks[checkName] = serverCheckCols.BD
case "be":
serverInfo.Checks[checkName] = serverCheckCols.BE
case "bf":
serverInfo.Checks[checkName] = serverCheckCols.BF
}
}
data = append(data, serverInfo)
}
return data, nil, nil, http.StatusOK
}