mirror of
https://github.com/akvorado/akvorado.git
synced 2025-12-11 22:14:02 +01:00
116 lines
3.9 KiB
Go
116 lines
3.9 KiB
Go
// SPDX-FileCopyrightText: 2023 Free Mobile
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
package schema
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"akvorado/common/helpers"
|
|
)
|
|
|
|
// Configuration describes the configuration for the schema component.
|
|
type Configuration struct {
|
|
// Disabled lists the columns disabled (in addition to the ones disabled by default).
|
|
Disabled []ColumnKey
|
|
// Enabled lists the columns enabled (in addition to the ones enabled by default).
|
|
Enabled []ColumnKey `validate:"ninterfield=Disabled"`
|
|
// MainTableOnly lists columns to be moved to the main table only
|
|
MainTableOnly []ColumnKey
|
|
// NotMainTableOnly lists columns to be moved out of the main table only
|
|
NotMainTableOnly []ColumnKey `validate:"ninterfield=MainTableOnly"`
|
|
// Materialize lists columns that shall be materialized at ingest instead of computed at query time
|
|
Materialize []ColumnKey
|
|
// CustomDictionaries allows enrichment of flows with custom metadata
|
|
CustomDictionaries map[string]CustomDict `validate:"dive"`
|
|
}
|
|
|
|
// CustomDict represents a single custom dictionary
|
|
type CustomDict struct {
|
|
Keys []CustomDictKey `validate:"required,dive"`
|
|
Attributes []CustomDictAttribute `validate:"required,dive"`
|
|
Source string `validate:"required"`
|
|
Layout string `validate:"required,oneof=hashed iptrie complex_key_hashed"`
|
|
Dimensions []string `validate:"required"`
|
|
}
|
|
|
|
// CustomDictKey represents a single key (matching) column of a custom dictionary
|
|
type CustomDictKey struct {
|
|
Name string `validate:"required,alphanum"`
|
|
Type string `validate:"required,oneof=String UInt8 UInt16 UInt32 UInt64 IPv6"`
|
|
MatchDimension string `validate:"omitempty,alphanum"`
|
|
MatchDimensionSuffix string `validate:"omitempty,alphanum"`
|
|
}
|
|
|
|
// CustomDictAttribute represents a single value column of a custom dictionary
|
|
type CustomDictAttribute struct {
|
|
Name string `validate:"required,alphanum"`
|
|
Type string `validate:"required,oneof=String UInt8 UInt16 UInt32 UInt64 IPv6"`
|
|
Label string `validate:"omitempty,alphanum"` // empty label is acceptable, in this case fallback to name
|
|
Default string `validate:"omitempty,alphanum"`
|
|
}
|
|
|
|
// DefaultConfiguration returns the default configuration for the schema component.
|
|
func DefaultConfiguration() Configuration {
|
|
return Configuration{}
|
|
}
|
|
|
|
// MarshalText turns a column key to text
|
|
func (ck ColumnKey) MarshalText() ([]byte, error) {
|
|
got, ok := columnNameMap.LoadValue(ck)
|
|
if ok {
|
|
return []byte(got), nil
|
|
}
|
|
return nil, errors.New("unknown column name")
|
|
}
|
|
|
|
func (ck ColumnKey) String() string {
|
|
name, _ := columnNameMap.LoadValue(ck)
|
|
return name
|
|
}
|
|
|
|
// UnmarshalText provides a column key from text
|
|
func (ck *ColumnKey) UnmarshalText(input []byte) error {
|
|
got, ok := columnNameMap.LoadKey(string(input))
|
|
if ok {
|
|
*ck = got
|
|
return nil
|
|
}
|
|
return errors.New("unknown provider")
|
|
}
|
|
|
|
// GetCustomDictConfig returns the custom dicts encoded in this schema
|
|
func (c *Component) GetCustomDictConfig() map[string]CustomDict {
|
|
return c.c.CustomDictionaries
|
|
}
|
|
|
|
// DefaultCustomDictConfiguration is the default config for a CustomDict
|
|
func DefaultCustomDictConfiguration() CustomDict {
|
|
return CustomDict{
|
|
Layout: "hashed",
|
|
}
|
|
}
|
|
|
|
// DefaultCustomDictKeyConfiguration is the default config for a CustomDictKey
|
|
func DefaultCustomDictKeyConfiguration() CustomDictKey {
|
|
return CustomDictKey{
|
|
Type: "String",
|
|
}
|
|
}
|
|
|
|
// DefaultCustomDictAttributeConfiguration is the default config for a CustomDictAttribute
|
|
func DefaultCustomDictAttributeConfiguration() CustomDictAttribute {
|
|
return CustomDictAttribute{
|
|
Type: "String",
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
helpers.RegisterMapstructureUnmarshallerHook(
|
|
helpers.DefaultValuesUnmarshallerHook(DefaultCustomDictConfiguration()))
|
|
helpers.RegisterMapstructureUnmarshallerHook(
|
|
helpers.DefaultValuesUnmarshallerHook(DefaultCustomDictKeyConfiguration()))
|
|
helpers.RegisterMapstructureUnmarshallerHook(
|
|
helpers.DefaultValuesUnmarshallerHook(DefaultCustomDictAttributeConfiguration()))
|
|
}
|