Files
2026-10-01 09:50:59 +07:00

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
}