diff --git a/backend/api.go b/backend/api.go index 41c6c92..016a751 100644 --- a/backend/api.go +++ b/backend/api.go @@ -138,6 +138,8 @@ func apiConfigShow(_req *http.Request, _params httprouter.Params) (api.Response, RoutesColumnsOrder: AliceConfig.Ui.RoutesColumnsOrder, NeighboursColumns: AliceConfig.Ui.NeighboursColumns, NeighboursColumnsOrder: AliceConfig.Ui.NeighboursColumnsOrder, + LookupColumns: AliceConfig.Ui.LookupColumns, + LookupColumnsOrder: AliceConfig.Ui.LookupColumnsOrder, PrefixLookupEnabled: AliceConfig.Server.EnablePrefixLookup, } return result, nil diff --git a/backend/api/response.go b/backend/api/response.go index 109a858..a285a93 100644 --- a/backend/api/response.go +++ b/backend/api/response.go @@ -34,6 +34,9 @@ type ConfigResponse struct { RoutesColumns map[string]string `json:"routes_columns"` RoutesColumnsOrder []string `json:"routes_columns_order"` + LookupColumns map[string]string `json:"lookup_columns"` + LookupColumnsOrder []string `json:"lookup_columns_order"` + PrefixLookupEnabled bool `json:"prefix_lookup_enabled"` } diff --git a/backend/config.go b/backend/config.go index 6bbaf35..a173bc0 100644 --- a/backend/config.go +++ b/backend/config.go @@ -44,6 +44,9 @@ type UiConfig struct { NeighboursColumns map[string]string NeighboursColumnsOrder []string + LookupColumns map[string]string + LookupColumnsOrder []string + RoutesRejections RejectionsConfig RoutesNoexports NoexportsConfig @@ -109,16 +112,17 @@ func getBackendType(section *ini.Section) int { } // Get UI config: Routes Columns Default -func getRoutesColumnsDefault() (map[string]string, []string) { +func getRoutesColumnsDefaults() (map[string]string, []string, error) { columns := map[string]string{ + "network": "Network", "bgp.as_path": "AS Path", "gateway": "Gateway", "interface": "Interface", } - order := []string{"Network", "bgp.as_path", "gateway", "interface"} + order := []string{"network", "bgp.as_path", "gateway", "interface"} - return columns, order + return columns, order, nil } // Get UI config: Routes Columns @@ -136,8 +140,7 @@ func getRoutesColumns(config *ini.File) (map[string]string, []string, error) { keys := section.Keys() if len(keys) == 0 { - defaultColumns, defaultOrder := getRoutesColumnsDefault() - return defaultColumns, defaultOrder, nil + return getRoutesColumnsDefaults() } for _, key := range keys { @@ -149,7 +152,7 @@ func getRoutesColumns(config *ini.File) (map[string]string, []string, error) { } // Get UI config: Get Neighbours Columns Defaults -func getNeighboursColumnsDefaults() (map[string]string, []string) { +func getNeighboursColumnsDefaults() (map[string]string, []string, error) { columns := map[string]string{ "address": "Neighbour", "asn": "ASN", @@ -165,7 +168,7 @@ func getNeighboursColumnsDefaults() (map[string]string, []string) { "Uptime", "Description", "routes_received", "routes_filtered", } - return columns, order + return columns, order, nil } // Get UI config: Get Neighbours Columns @@ -182,8 +185,49 @@ func getNeighboursColumns(config *ini.File) ( keys := section.Keys() if len(keys) == 0 { - defaultColumns, defaultOrder := getNeighboursColumnsDefaults() - return defaultColumns, defaultOrder, nil + return getNeighboursColumnsDefaults() + } + + for _, key := range keys { + columns[key.Name()] = section.Key(key.Name()).MustString("") + order = append(order, key.Name()) + } + + return columns, order, nil +} + +// Get UI config: Get Prefix search / Routes lookup columns +// As these differ slightly from our routes in the response +// (e.g. the neighbor and source rs is referenced as a nested object) +// we provide an additional configuration for this +func getLookupColumnsDefaults() (map[string]string, []string, error) { + columns := map[string]string{ + "network": "Network", + "gateway": "Gateway", + "neighbour.asn": "ASN", + "neighbour.description": "Neighbor", + "bgp.as_path": "AS Path", + "routeserver.name": "RS", + } + + order := []string{"network", "bgp.as_path", "gateway", "interface"} + + return columns, order, nil +} + +func getLookupColumns(config *ini.File) ( + map[string]string, + []string, + error, +) { + columns := make(map[string]string) + order := []string{} + + section := config.Section("lookup_columns") + keys := section.Keys() + + if len(keys) == 0 { + return getLookupColumnsDefaults() } for _, key := range keys { @@ -286,6 +330,12 @@ func getUiConfig(config *ini.File) (UiConfig, error) { return uiConfig, err } + // Lookup table columns + lookupColumns, lookupColumnsOrder, err := getLookupColumns(config) + if err != nil { + return uiConfig, err + } + // Get rejections and reasons rejections, err := getRoutesRejections(config) if err != nil { @@ -312,6 +362,9 @@ func getUiConfig(config *ini.File) (UiConfig, error) { NeighboursColumns: neighboursColumns, NeighboursColumnsOrder: neighboursColumnsOrder, + LookupColumns: lookupColumns, + LookupColumnsOrder: lookupColumnsOrder, + RoutesRejections: rejections, RoutesNoexports: noexports,