57 lines
2.4 KiB
Go
57 lines
2.4 KiB
Go
package lexicomai
|
|
|
|
import "strings"
|
|
|
|
// knownProducts — перечень продуктов компании, которые поддерживает модуль
|
|
// (наблюдено на сандбоксе-проде и в деплое EDDS). Сторонние/открытые продукты
|
|
// (vllm), снятые (deprecated), легаси (spr5) и не-сервисы (mocks, wwwroot)
|
|
// сюда не входят. ses-sip-gateway-api — вторичный, тоже не поддерживается.
|
|
//
|
|
// Это имена продуктов, а не адреса: никаких IP/подсетей/VLAN в коде нет.
|
|
// Список не «жёсткая схема», а валидатор, чтобы модель не обращалась к
|
|
// несуществующим продуктам (fail-closed).
|
|
var knownProducts = map[string]struct{}{
|
|
"acs": {}, "ams": {}, "cls": {}, "crs": {}, "llm": {}, "qas": {},
|
|
"res": {}, "sbs": {}, "see": {}, "ses": {}, "ses-sip": {},
|
|
"smc": {}, "spr": {},
|
|
"tts": {}, "ups": {}, "vds": {},
|
|
}
|
|
|
|
// DefaultProducts — сводный перечень (для repo_catalog/инвентаря без таргета).
|
|
func DefaultProducts() []string {
|
|
return sortedProductNames()
|
|
}
|
|
|
|
// NormalizeProduct приводит имя продукта к каноническому виду (нижний регистр).
|
|
// Пустое или неизвестное имя — ошибка (fail-closed).
|
|
func NormalizeProduct(name string) (string, error) {
|
|
p := strings.ToLower(strings.TrimSpace(name))
|
|
if p == "" {
|
|
return "", errProductRequired
|
|
}
|
|
if _, ok := knownProducts[p]; !ok {
|
|
return "", &UnknownProductError{Name: name}
|
|
}
|
|
return p, nil
|
|
}
|
|
|
|
// ServiceUnit возвращает имя systemd-юнита основного сервиса продукта.
|
|
func ServiceUnit(product string) string {
|
|
return product + ".service"
|
|
}
|
|
|
|
// sortedProductNames возвращает отсортированный список известных продуктов.
|
|
func sortedProductNames() []string {
|
|
names := make([]string, 0, len(knownProducts))
|
|
for n := range knownProducts {
|
|
names = append(names, n)
|
|
}
|
|
// Простая сортировка — стабильный порядок в выводе.
|
|
for i := 1; i < len(names); i++ {
|
|
for j := i; j > 0 && names[j] < names[j-1]; j-- {
|
|
names[j], names[j-1] = names[j-1], names[j]
|
|
}
|
|
}
|
|
return names
|
|
}
|