{"record":{"id":"a735d7a7ff945b13","repo":"amir20/dozzle","slug":"unknown-dispatcher-type-s","errorCode":null,"errorMessage":"unknown dispatcher type: %s","messagePattern":"unknown dispatcher type: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/notification/config.go","lineNumber":205,"sourceCode":"\t\t}\n\t\tm.dispatchers.Store(dc.ID, d)\n\t\tlog.Debug().Int(\"id\", dc.ID).Msg(\"Loaded dispatcher from state sync\")\n\t}\n\n\tm.updateListeners()\n\n\tlog.Debug().Int(\"subscriptions\", len(subscriptions)).Int(\"dispatchers\", len(dispatchers)).Msg(\"Replaced notification state\")\n\treturn nil\n}\n\n// createDispatcher creates a dispatcher from a DispatcherConfig.\n// Cloud dispatchers are not created here; they are managed via cloud.yml and SetCloudDispatcher.\nfunc createDispatcher(config DispatcherConfig) (dispatcher.Dispatcher, error) {\n\tswitch config.Type {\n\tcase \"webhook\":\n\t\treturn dispatcher.NewWebhookDispatcher(config.Name, config.URL, config.Template, config.Headers)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown dispatcher type: %s\", config.Type)\n\t}\n}\n\n// loadSubscription loads a subscription with its existing ID (used when loading from config)\nfunc (m *Manager) loadSubscription(sub *Subscription) error {\n\tif err := sub.CompileExpressions(); err != nil {\n\t\treturn err\n\t}\n\n\tif sub.MetricCooldowns == nil {\n\t\tsub.MetricCooldowns = xsync.NewMap[string, time.Time]()\n\t}\n\tif sub.MetricSampleBuffers == nil {\n\t\tsub.MetricSampleBuffers = xsync.NewMap[string, *utils.RingBuffer[bool]]()\n\t}\n\tif sub.EventCooldowns == nil {\n\t\tsub.EventCooldowns = xsync.NewMap[string, time.Time]()\n\t}","sourceCodeStart":187,"sourceCodeEnd":223,"githubUrl":"https://github.com/amir20/dozzle/blob/d9463cbe21874e44ab79db6fa63e746ca7d22928/internal/notification/config.go#L187-L223","documentation":"createDispatcher switches on DispatcherConfig.Type and returns this error when the type string matches no registered dispatcher factory (webhook, etc.). Cloud types are intentionally not created here, so a cloud-typed or misspelled type in notifications.yml reaches this guard.","triggerScenarios":"Thrown at internal/notification/config.go:205 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use a supported type such as 'webhook' (see dispatcher factory registrations).","Fix typos in the type field of notifications.yml.","Remove cloud-type dispatcher entries from notifications.yml; cloud dispatchers are managed via cloud.yml."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d9463cbe21874e44ab79db6fa63e746ca7d22928","analyzedAt":"2026-09-07T10:08:55.855Z","contentChangedAt":"2026-09-07T10:08:55.855Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}