blob: be061c1997bb16b7c00f34894218510b93901acd [file] [log] [blame]
package tc
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import (
"database/sql"
"errors"
"strings"
"github.com/apache/trafficcontrol/lib/go-util"
)
// ServerchecksResponse is a list of Serverchecks as a response.
// swagger:response ServerchecksResponse
// in: body
type ServerchecksResponse struct {
// in: body
Response []Servercheck `json:"response"`
Alerts
}
// CommonCheckFields is a structure containing all of the fields common to both
// Serverchecks and GenericServerChecks.
type CommonCheckFields struct {
// AdminState is the server's status - called "AdminState" for legacy reasons.
AdminState string `json:"adminState"`
// CacheGroup is the name of the Cache Group to which the server belongs.
CacheGroup string `json:"cacheGroup"`
// ID is the integral, unique identifier of the server.
ID int `json:"id"`
// HostName of the checked server.
HostName string `json:"hostName"`
// RevalPending is a flag that indicates if revalidations are pending for the checked server.
RevalPending bool `json:"revalPending"`
// Profile is the name of the Profile used by the checked server.
Profile string `json:"profile"`
// Type is the name of the server's Type.
Type string `json:"type"`
// UpdPending is a flag that indicates if updates are pending for the checked server.
UpdPending bool `json:"updPending"`
}
// Servercheck is a single Servercheck struct for GET response.
// swagger:model Servercheck
type Servercheck struct {
CommonCheckFields
// Various check types
Checks struct {
// IPv4 production interface (legacy name)
Iface10G int `json:"10G"`
// IPv6 production interface (legacy name)
Iface10G6 int `json:"10G6"`
// Cache Disk Usage
CDU int `json:"CDU"`
// Cache Hit Ratio
CHR int `json:"CHR"`
// DSCP check
DSCP int `json:"DSCP"`
// DNS check
FQDN int `json:"FQDN"`
// Out-of-band (BMC) interface check
ILO int `json:"ILO"`
// IPv4 production interface (new name)
IPv4 int `json:"IPv4"`
// IPv6 production interface (new name)
IPv6 int `json:"IPv6"`
// MTU check
MTU int `json:"MTU"`
// ORT check
ORT int `json:"ORT"`
// Traffic Router status for checked server
RTR int `json:"RTR"`
} `json:"checks"`
}
// ServercheckPost is a single Servercheck struct for Update and Create to
// depict what changed.
type ServercheckPost struct {
// The Servercheck data to submit
//
// Name of the server check type
//
// required: true
Name string `json:"servercheck_short_name"`
// ID of the server
//
ID int `json:"id"`
// Name of the server
HostName string `json:"name" `
// Value of the check result
//
// required: true
Value int `json:"value"`
}
// ServercheckRequestNullable is a single nullable Servercheck struct for Update
// and Create to depict what changed.
type ServercheckRequestNullable struct {
Name *string `json:"servercheck_short_name"`
ID *int `json:"id"`
Value *int `json:"value"`
HostName *string `json:"host_name"`
}
// Validate implements the
// github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api.ParseValidate
// interface.
func (scp ServercheckRequestNullable) Validate(tx *sql.Tx) error {
errs := []string{}
if scp.ID == nil && scp.HostName == nil {
errs = append(errs, "id or host_name")
}
if scp.Name == nil || *scp.Name == "" {
errs = append(errs, "servercheck_short_name")
}
if len(errs) > 0 {
return util.JoinErrs([]error{errors.New("required fields missing: " + strings.Join(errs, ", "))})
}
return nil
}
// ServercheckPostResponse is the response to a Servercheck POST request.
type ServercheckPostResponse struct {
Alerts []Alert `json:"alerts"`
}
// GenericServerCheck represents a server with some associated meta data presented
// along with its arbitrary "checks". This is unlike a Servercheck in that the
// represented checks are not known before the time a request is made, and checks
// with no value are not presented.
type GenericServerCheck struct {
CommonCheckFields
// Checks maps arbitrary checks - up to one per "column" (whatever those mean)
// done on the server to their values.
Checks map[string]*int `json:"checks,omitempty"`
}
// ServercheckAPIResponse (not to be confused with ServerchecksResponse) is the
// type of a response from Traffic Ops to a request to its /servercheck
// endpoint (not to be confused with its /servers/checks endpoint).
type ServercheckAPIResponse struct {
Response []GenericServerCheck `json:"response"`
Alerts
}
// ServerCheckColumns is a collection of columns associated with a particular
// server's "checks". The meaning of the column names is unknown.
type ServerCheckColumns struct {
// ID uniquely identifies a servercheck columns row.
ID int `db:"id"`
// Server is the ID of the server which is associated with these checks.
Server int `db:"server"`
AA *int `db:"aa"`
AB *int `db:"ab"`
AC *int `db:"ac"`
AD *int `db:"ad"`
AE *int `db:"ae"`
AF *int `db:"af"`
AG *int `db:"ag"`
AH *int `db:"ah"`
AI *int `db:"ai"`
AJ *int `db:"aj"`
AK *int `db:"ak"`
AL *int `db:"al"`
AM *int `db:"am"`
AN *int `db:"an"`
AO *int `db:"ao"`
AP *int `db:"ap"`
AQ *int `db:"aq"`
AR *int `db:"ar"`
AT *int `db:"at"`
AU *int `db:"au"`
AV *int `db:"av"`
AW *int `db:"aw"`
AX *int `db:"ax"`
AY *int `db:"ay"`
AZ *int `db:"az"`
BA *int `db:"ba"`
BB *int `db:"bb"`
BC *int `db:"bc"`
BD *int `db:"bd"`
BE *int `db:"be"`
BF *int `db:"bf"`
}