package entity // Источник события журнала записи. const ( // EventOriginPipeline — событие произвёл шаг конвейера. EventOriginPipeline = "pipeline" // EventOriginHuman — событие произвёл человек: перезапуск виден в журнале с // указанием, кто его сделал. EventOriginHuman = "human" ) // Исход события. const ( EventOutcomeDone = "done" EventOutcomeFailed = "failed" EventOutcomeHalted = "halted" EventOutcomeResumed = "resumed" ) // AllEventOrigins — закрытый перечень источников для схемы хранилища. func AllEventOrigins() []string { return []string{EventOriginPipeline, EventOriginHuman} } // AllEventOutcomes — закрытый перечень исходов для схемы хранилища. func AllEventOutcomes() []string { return []string{EventOutcomeDone, EventOutcomeFailed, EventOutcomeHalted, EventOutcomeResumed} } // RecordEvent — строка журнала событий одной записи. // // Пишется на смену рубежа, на остановку и на снятие остановки — не на каждое // откладывание опроса: часовая запись дала бы сотни строк ни о чём. Ни один шаг // конвейера этот журнал не читает, чтобы решить, что делать дальше: решение // принимается по рубежу записи, и второй источник решения разошёлся бы с первым // молча. // // Содержимое записи сюда не попадает — инвариант приватности действует здесь // наравне с журналом сервиса. Поле текста отказа зовётся `OutcomeText`, а не // `error_text`: последнее имя названо поимённо инвариантом о секрете, и две // колонки с этим именем сделали бы инвариант двусмысленным. type RecordEvent struct { Id string RecordID string Origin string Step string Outcome string OutcomeText string DurationMs int64 }