Documentation
¶
Index ¶
- Constants
- type ADIFBand
- type ADIFDate
- type ADIFFreq
- type ADIFTime
- type ApiKey
- type AppConfig
- type CatCommand
- type CatConfig
- type CatState
- type CatStatus
- type ContactHistory
- type ContactedStation
- type Country
- type DatastoreConfig
- type EmailConfig
- type ForwarderConfig
- type Logbook
- type LogbookList
- type LoggingConfig
- type LoggingStation
- type LookupConfig
- type Marker
- type PostRequest
- type Qsl
- type Qso
- type QsoDetails
- type QsoSlice
- type RequestAction
- type RequiredConfigs
- type RigConfig
- type SerialConfig
- type ServerConfig
- type StateValues
- type UiConfig
- type User
- type ValueMapping
Constants ¶
const ( PostgresDriverName = "postgres" SqliteDriverName = "sqlite" )
const ( ConfigServiceName = "configservice" DatabaseServiceName = "databaseservice" SqliteServiceName = "sqliteservice" LoggingServiceName = "loggingservice" CatServiceName = "catservice" HamNutLookupServiceName = "hamnutlookupservice" QrzLookupServiceName = "qrzlookupservice" QrzForwardingServiceName = "qrzforwardingservice" EmailServiceName = "emailservice" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AppConfig ¶
type AppConfig struct {
DatastoreConfig DatastoreConfig `json:"datastore_config"`
LoggingConfig LoggingConfig `json:"logging_config"`
RequiredConfigs RequiredConfigs `json:"required_configs"`
ServerConfig *ServerConfig `json:"server_config,omitempty"`
RigConfigs []RigConfig `json:"rig_configs,omitempty"`
LookupServiceConfigs []LookupConfig `json:"lookup_service_configs,omitempty"`
ForwardingConfigs []ForwarderConfig `json:"forwarding_configs,omitempty"`
EmailConfigs EmailConfig `json:"email_configs,omitempty"`
LoggingStation LoggingStation `json:"logging_station"`
}
type CatCommand ¶ added in v0.0.21
type CatConfig ¶ added in v0.0.21
type CatConfig struct {
Enabled bool
// ListenerRateLimiterIntervalMS controls how frequently the CAT listener will
// poll the serial port for new data. The unit is milliseconds.
//
// Default is 10ms.
ListenerRateLimiterIntervalMS time.Duration
// ListenerReadTimeoutMS controls how long each CAT listener cycle will wait for
// a framed response line from the serial client. This should typically be less
// than or equal to ListenerRateLimiterInterval so that each tick's read can
// complete or time out before the next tick occurs. The unit is milliseconds.
//
// If left as zero, callers may choose a sensible default or fall back to the
// underlying SerialConfig.ReadTimeoutMS.
//
// Default is 8ms.
ListenerReadTimeoutMS time.Duration
// SendChannelSize is the size of the channel used to send CAT commands to the serial port.
//
// Default is 10.
SendChannelSize int
// ProcessingChannelSize is the size of the channel used to receive a raw response line from the serial port.
// It then processes the response line into a CAT status value that can be consumed by the frontend.
//
// Default is 10
ProcessingChannelSize int
}
type CatStatus ¶ added in v0.0.21
CatStatus is a map of CAT status values keyed by state tag. These are related to CAT commands; a particular command when issued will return a status value linked to that command. The status value is a string that represents the status of the CAT command in a format usable by the frontend.
See the cat.StatusChannel in the cat/service.go file for more details.
type ContactHistory ¶ added in v0.0.41
type ContactHistory struct {
ID int64 `json:"id"`
Band string `json:"band"`
Freq string `json:"freq" boil:"freq"`
Mode string `json:"mode"`
QsoDate string `json:"qso_date" boil:"qso_date"`
TimeOn string `json:"time_on"`
Name string `json:"name"`
Country string `json:"country"`
Call string `json:"call"`
RstSent string `json:"rst_sent"`
RstRcvd string `json:"rst_rcvd"`
Notes string `json:"notes"`
}
type ContactedStation ¶ added in v0.0.6
type ContactedStation struct {
// ID is the primary key of the ContactedStation table. This is only used when updating the contacted station details.
// Notice the JSON tag for this struct is "csid" so that it does not clash with the "id" field of the QSO struct.
// See the models.ts file for more details.
CSID int64 `json:"csid"`
Address string `json:"address"`
Age string `json:"age"`
Altitude string `json:"altitude"`
Call string `json:"call"`
Cont string `json:"cont"` // the contacted station's Continent
ContactedOp string `json:"contacted_op"`
Country string `json:"country"`
CQZ string `json:"cqz"`
DXCC string `json:"dxcc"`
Email string `json:"email"`
EqCall string `json:"eq_call"` // the contacted station's owner's callsign (if different from call)
Gridsquare string `json:"gridsquare"`
Iota string `json:"iota"`
IotaIslandId string `json:"iota_island_id"`
ITUZ string `json:"ituz"`
Lat string `json:"lat"`
Lon string `json:"lon"`
Name string `json:"name"`
QTH string `json:"qth"`
Rig string `json:"rig"`
Sig string `json:"sig"` // the name of the contacted station's special activity or interest group
SigInfo string `json:"sig_info"` // information associated with the contacted station's activity or interest group
Web string `json:"web"`
WwffRef string `json:"wwff_ref"`
}
ContactedStation represents details of the station contacted during a QSO, and is compatible with the ADI format.
type Country ¶ added in v0.0.6
type Country struct {
ID int64
Name string `json:"name" hamnut:"countryName"`
Prefix string `json:"prefix" hamnut:"prefix"`
Ccode string `json:"ccode" hamnut:"countryCode"`
Continent string `json:"continent" hamnut:"continent"`
CQZone string `json:"cq_zone" hamnut:"cqZone"`
ITUZone string `json:"itu_zone" hamnut:"ituZone"`
DXCCPrefix string `json:"dxcc_prefix" hamnut:"primaryDXCCPrefix"`
TimeOffset string `json:"time_offset" hamnut:"timeOffset"`
ShortPathDistance string `json:"short_path_distance"`
LongPathDistance string `json:"long_path_distance"`
ShortPathBearing string `json:"short_path_bearing"`
LongPathBearing string `json:"long_path_bearing"`
IsNewEntity bool `json:"is_new_entity"` // Indicates if this QSO is with a new country for the logging station
LocalTime string `json:"local_time"`
}
type DatastoreConfig ¶
type DatastoreConfig struct {
Driver string `json:"driver" validate:"oneof=postgres sqlite"`
Path string `json:"path" validate:"required_if=Driver sqlite,omitempty"` // Used for sqlite only
Options map[string]string `json:"options" validate:"required_if=Driver sqlite,omitempty"` // Used for sqlite only
Host string `json:"host,omitempty" validate:"required_if=Driver postgres,omitempty,hostname|ip"`
Port int `json:"port,omitempty" validate:"required_if=Driver postgres,omitempty,min=1,max=65535"`
User string `json:"user,omitempty" validate:"required_if=Driver postgres,omitempty,min=1,max=63,alphanum|contains=_|contains=-"`
Password string `json:"pass,omitempty" validate:"required_if=Driver postgres,omitempty,min=1"`
Database string `json:"database,omitempty" validate:"required_if=Driver postgres,omitempty,min=1,max=63,alphanum|contains=_|contains=-"`
SSLMode string `json:"ssl_mode,omitempty" validate:"required_if=Driver postgres,omitempty,oneof=disable require verify-ca verify-full"`
MaxOpenConns int `json:"max_open_conns" validate:"min=1"` // For Postgres, minimum is 5 (enforced in database validation)
MaxIdleConns int `json:"max_idle_conns" validate:"min=1"`
ConnMaxLifetime int `json:"conn_max_lifetime" validate:"min=0"` // Number of minutes
ConnMaxIdleTime int `json:"conn_max_idle_time" validate:"min=0"` // Number of minutes
ContextTimeout int `json:"context_timeout" validate:"min=5"` // Seconds
TransactionContextTimeout int `json:"transaction_context_timeout" validate:"min=5"` // Seconds
Debug bool // Enable SQLBoiler query logging
Params map[string]string `json:"params,omitempty" validate:"omitempty"`
}
type EmailConfig ¶ added in v0.0.55
type EmailConfig struct {
Name string `json:"name"`
Enabled bool `json:"enabled"`
Username string `json:"username"`
Password string `json:"password"`
Host string `json:"host"`
Port int `json:"port"`
From string `json:"from" validate:"required,email"`
To string `json:"to" validate:"required,email"`
Subject string `json:"subject"`
Body string `json:"body"`
// SMTP operational knobs
SmtpDialTimeoutSec int `json:"smtp_dial_timeout_sec,omitempty"`
SmtpRetryCount int `json:"smtp_retry_count,omitempty"`
SmtpRetryDelaySec int `json:"smtp_retry_delay_sec,omitempty"`
}
type ForwarderConfig ¶ added in v0.0.49
type ForwarderConfig struct {
Name string `json:"name"`
Enabled bool `json:"enabled"`
URL string `json:"url"`
APIKey string `json:"apikey,omitempty"`
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
UserAgent string `json:"useragent"`
HttpTimeout time.Duration `json:"timeout"`
}
type Logbook ¶ added in v0.0.7
type Logbook struct {
ID int64 `json:"id"`
UserID int64 `json:"user_id"` // FK to users.id
Name string `json:"name"` // Unique name (to the user) for the logbook
Callsign string `json:"callsign"` // The callsign associated with the logbook
APIKey string `json:"api_key,omitempty"`
Description string `json:"description,omitempty"`
}
type LogbookList ¶ added in v0.0.7
type LogbookList []Logbook
type LoggingConfig ¶ added in v0.0.2
type LoggingConfig struct {
Level string `json:"level" validate:"oneof=trace debug info warn error fatal panic"`
SkipFrameCount int `json:"skip_frame_count" validate:"min=0"`
WithTimestamp bool `json:"with_timestamp"`
ConsoleLogging bool `json:"console_logging"`
FileLogging bool `json:"file_logging"`
RelLogFileDir string `json:"rel_log_file_dir" validate:"required"`
LogFileMaxBackups int `json:"log_file_max_backups" validate:"min=0"`
LogFileMaxAgeDays int `json:"log_file_max_age_days" validate:"min=0"`
LogFileMaxSizeMB int `json:"log_file_max_size_mb" validate:"omitempty,min=1"`
ShutdownTimeoutMS int `json:"shutdown_timeout_ms" validate:"omitempty,min=10,max=10000"` // Timeout for graceful shutdown (10ms-10s, 0=use default)
ShutdownTimeoutWarning bool `json:"shutdown_timeout_warning"` // Log warning if the shutdown timeout is exceeded
// Optional polish fields
ConsoleNoColor bool `json:"console_no_color"`
ConsoleTimeFormat string `json:"console_time_format"`
LogFileCompress bool `json:"log_file_compress"`
}
type LoggingStation ¶ added in v0.0.6
type LoggingStation struct {
AntennaAzimuth string `json:"ant_az"` // the bearing from the logging station to the contacted station
MyAltitude string `json:"my_altitude"`
MyAntenna string `json:"my_antenna"`
MyCity string `json:"my_city"`
MyCountry string `json:"my_country"`
MyCqZone string `json:"my_cq_zone"`
MyDXCC string `json:"my_dxcc"`
MyGridsquare string `json:"my_gridsquare"`
MyIota string `json:"my_iota"`
MyIotaIslandID string `json:"my_iota_island_id"`
MyITUZone string `json:"my_itu_zone"`
MyLat string `json:"my_lat"`
MyLon string `json:"my_lon"`
MyMorseKeyInfo string `json:"my_morse_key_info"`
MyMorseKeyType string `json:"my_morse_key_type"`
MyName string `json:"my_name"`
MyPostalCode string `json:"my_postal_code"`
MyRig string `json:"my_rig"`
MySig string `json:"my_sig"`
MySigInfo string `json:"my_sig_info"`
MyStreet string `json:"my_street"`
MyWwffRef string `json:"my_wwff_ref"`
Operator string `json:"operator"` // the logging operator's callsign if STATION_CALLSIGN is absent, OPERATOR shall be treated as both the logging station's callsign and the logging operator's callsign
OwnerCallsign string `json:"owner_callsign"`
StationCallsign string `json:"station_callsign" validate:"required,min=3,max=30,alphanum"`
}
LoggingStation represents the details of the station logging the QSO, including location, equipment, and operator info. It is compatible with the ADI format.
type LookupConfig ¶ added in v0.0.34
type LookupConfig struct {
Name string `json:"name"`
Enabled bool `json:"enabled"`
URL string `json:"url"`
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
UserAgent string `json:"useragent"`
HttpTimeout time.Duration `json:"timeout"` // Seconds
ViewUrl string `json:"view_url,omitempty"`
}
type Marker ¶ added in v0.0.21
type Marker struct {
Tag string
Index int
Length int
ValueMappings []ValueMapping
}
type PostRequest ¶ added in v0.0.17
type PostRequest struct {
Callsign string `json:"callsign"` // The callsign associated with the user account *NOT THE LOGBOOK CALLSIGN*. The logbook callsign is associated with Key.
Key string `json:"key"` // Logbook's API Key, or if registering, the Bootstrap Key
// For RegisterLogbookAction, a Logbook must be provided.
Logbook *Logbook `json:"logbook,omitempty"`
// For InsertQsoAction, Qso must be provided.
Qso *Qso `json:"qso,omitempty"`
}
type Qsl ¶ added in v0.0.25
type Qsl struct {
QslMsg string `json:"qslmsg"`
QslMsgRcvd string `json:"qslmsg_rcvd"`
QslRDate string `json:"qslrdate"`
QslSDate string `json:"qslsdate"`
QslRcvd string `json:"qsl_rcvd"`
QslRcvdVia string `json:"qsl_rcvd_via"`
QslRcvdNotes string `json:"qsl_rcvd_notes"`
QslSent string `json:"qsl_sent"`
QslSendVia string `json:"qsl_sent_via"`
QslVia string `json:"qsl_via"`
}
type Qso ¶ added in v0.0.6
type Qso struct {
ID int64 `json:"id"`
// LogbookID represents the foreign key to the logbook associated with a QSO entry.
// Every QSO entry MUST have a logbook associated with it.
LogbookID int64 `json:"logbook_id" validate:"required"`
// SessionID represents the foreign key to the session associated with a QSO entry.
// Every QSO entry MUST have a session associated with it.
SessionID int64 `json:"session_id" validate:"required"`
SmQsoUploadDate string `json:"sm_qso_upload_date"`
SmQsoUploadStatus string `json:"sm_qso_upload_status"`
SmFwrdByEmailDate string `json:"sm_fwrd_by_email_date"`
SmFwrdByEmailStatus string `json:"sm_fwrd_by_email_status"`
QrzComUploadDate string `json:"qrzcom_qso_upload_date"`
QrzComUploadStatus string `json:"qrzcom_qso_upload_status"`
/*
All the below fields are compatible with the ADI format and are populated by the adapter.
The only exception to this is the [xx]ID/ID fields, which are required by database functions.
*/
QsoDetails
ContactedStation
LoggingStation
Qsl
CountryDetails Country `json:"country_details" adapter:"ignore"` // More detailed information about the contacted station's country
ContactHistory []ContactHistory `json:"contact_history" adapter:"ignore"`
}
type QsoDetails ¶ added in v0.0.6
type QsoDetails struct {
AIndex string `json:"a_index"`
AntPath string `json:"ant_path"` // ADIF, section II.B.1 - currently, we only use S and L
Band string `json:"band" validate:"band"`
BandRx string `json:"band_rx"` //in a split frequency QSO, the logging station's receiving band
Comment string `json:"comment"`
ContestId string `json:"contest_id"`
Distance string `json:"distance"` // km
Freq string `json:"freq"`
FreqRx string `json:"freq_rx"`
Mode string `json:"mode" validate:"mode"`
Submode string `json:"submode"`
Notes string `json:"notes"` // information of interest to the logging station's operator
QsoDate string `json:"qso_date"`
QsoDateOff string `json:"qso_date_off"`
QsoRandom string `json:"qso_random"`
QsoComplete string `json:"qso_complete"`
RstRcvd string `json:"rst_rcvd"`
RstSent string `json:"rst_sent"`
RxPwr string `json:"rx_pwr"` // the contacted station's transmitter power in Watts with a value greater than or equal to 0
SRX string `json:"srx"` // contest QSO received serial number with a value greater than or equal to 0
STX string `json:"stx"` // contest QSO transmitted serial number with a value greater than or equal to 0
TimeOff string `json:"time_off"`
TimeOn string `json:"time_on"`
TxPwr string `json:"tx_pwr"` // the logging station's power in Watts with a value greater than or equal to 0
}
QsoDetails represents the details of a QSO and is compatible with the ADI format.
type RequestAction ¶ added in v0.0.17
type RequestAction string
const ( // RegisterLogbookAction registers a new logbook with the server. RegisterLogbookAction RequestAction = "register_logbook" InsertQsoAction = "insert_qso" )
func (RequestAction) String ¶ added in v0.0.17
func (s RequestAction) String() string
type RequiredConfigs ¶ added in v0.0.4
type RequiredConfigs struct {
DefaultRigID int64 `json:"default_rig_id"`
DefaultFreq string `json:"default_freq"`
DefaultMode string `json:"default_mode"`
DefaultIsRandomQso bool `json:"default_is_random_qso"`
PowerMultiplier int `json:"power_multiplier"`
DefaultTxPower int `json:"default_tx_power"`
UsePowerMultiplier bool `json:"use_power_multiplier"`
// The default TO email address.
DefaultFwdEmail string `json:"default_fwd_email"`
QsoForwardingIntervalSeconds int `json:"qso_forwarding_interval_seconds"`
}
type RigConfig ¶ added in v0.0.21
type RigConfig struct {
ID int64 `koanf:"id"`
Name string `koanf:"name"`
Model string `koanf:"model"`
Terminator string `koanf:"terminator"` // Terminator defines the character used to signal the end of a command.
CatCommands []CatCommand `koanf:"commands"`
CatStates []CatState `koanf:"states"`
SerialConfig SerialConfig `koanf:"serial_port"`
CatConfig CatConfig `koanf:"cat"`
}
type SerialConfig ¶ added in v0.0.21
type SerialConfig struct {
PortName string
BaudRate int
DataBits int
Parity serial.Parity
StopBits serial.StopBits
// The serial drivers' read timeout. The unit is milliseconds.
//
// Default is 200ms.
ReadTimeoutMS time.Duration
WriteTimeoutMS time.Duration // Milliseconds
RTS bool
DTR bool
LineDelimiter byte // If not provided, the default is '\r'.
}
type ServerConfig ¶ added in v0.0.19
type ServerConfig struct {
Name string `json:"name"` // AppName for goFiber
Host string `json:"host" validate:"required,hostname"`
Port int `json:"port" validate:"required,min=3000,max=65535"`
TLSEnabled bool `json:"tls_enabled"`
TLSCertFile string `json:"tls_cert_file" validate:"required_if=TLSEnabled true"`
TLSKeyFile string `json:"tls_key_file" validate:"required_if=TLSEnabled true"`
ReadTimeout int `json:"read_timeout" validate:"required"` // Seconds
WriteTimeout int `json:"write_timeout" validate:"required"` // Seconds
IdleTimeout int `json:"idle_timeout" validate:"required"` // Seconds
BodyLimit int `json:"body_limit" validate:"required"`
}
type StateValues ¶ added in v0.0.21
StateValues is a map of state values keyed by state tag. These are related to CAT commands; a particular command when issued will return a state value linked to that command. The state value is a string that represents the state of the CAT command in user-readable format.
See the cat.StateValues() method in the cat/service.go file for more details.
type UiConfig ¶ added in v0.0.26
type UiConfig struct {
DefaultRigID int64 `json:"default_rig_id"`
Logbook Logbook `json:"logbook"`
RigName string `json:"rig_name"`
// DefaultFreq is in khz. This is used when the CAT system is unavailable.
DefaultFreq string `json:"default_freq"`
// DefaultMode is the CAT mode when the CAT system is unavailable.
DefaultMode string `json:"default_mode"`
OwnersCallsign string `json:"owners_callsign"`
DefaultIsRandomQso bool `json:"default_is_random_qso"`
UsePowerMultiplier bool `json:"use_power_multiplier"`
PowerMultiplier int `json:"power_multiplier"`
DefaultTxPower int `json:"default_tx_power"`
DefaultFwdEmail string `json:"default_fwd_email"`
OwnerCallsign string `json:"owner_callsign"`
}
type User ¶ added in v0.0.13
type User struct {
ID int64 `json:"id"`
Callsign string `json:"callsign" validate:"min=3,max=30,alphanum"`
PassHash string `json:"pass_hash" validate:"required"`
Issuer string `json:"issuer,omitempty"`
Subject string `json:"subject,omitempty"`
Email string `json:"email,required"`
EmailConfirmed bool `json:"email_confirmed"`
}