{"record":{"id":"6c146107381f5d6d","repo":"louislam/uptime-kuma","slug":"unknown-monitor-type","errorCode":null,"errorMessage":"Unknown Monitor Type","messagePattern":"Unknown Monitor Type","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/model/monitor.js","lineNumber":902,"sourceCode":"                    let startTime = dayjs().valueOf();\n\n                    bean.msg = await kafkaProducerAsync(\n                        JSON.parse(this.kafkaProducerBrokers),\n                        this.kafkaProducerTopic,\n                        this.kafkaProducerMessage,\n                        {\n                            allowAutoTopicCreation: this.kafkaProducerAllowAutoTopicCreation,\n                            ssl: this.kafkaProducerSsl,\n                            clientId: `Uptime-Kuma/${version}`,\n                            interval: this.interval,\n                            connectionTimeout: this.timeout,\n                        },\n                        JSON.parse(this.kafkaProducerSaslOptions)\n                    );\n                    bean.status = UP;\n                    bean.ping = dayjs().valueOf() - startTime;\n                } else {\n                    throw new Error(\"Unknown Monitor Type\");\n                }\n\n                if (this.isUpsideDown()) {\n                    bean.status = flipStatus(bean.status);\n\n                    if (bean.status === DOWN) {\n                        throw new Error(\"Flip UP to DOWN\");\n                    }\n                }\n\n                retries = 0;\n            } catch (error) {\n                if (error?.name === \"CanceledError\") {\n                    bean.msg = `timeout by AbortSignal (${this.timeout}s)`;\n                } else {\n                    bean.msg = error.message;\n                }\n","sourceCodeStart":884,"sourceCodeEnd":920,"githubUrl":"https://github.com/louislam/uptime-kuma/blob/6b5ea0155793e666666745fb8d6fef1e829543a2/server/model/monitor.js#L884-L920","documentation":"The terminal else of the beat-loop type switch. When monitor.type matches none of the built-in types and is absent from monitorTypeList, the monitor cannot execute and throws.","triggerScenarios":"A monitor row whose type column is null, empty, or an unrecognized string.","commonSituations":"DB row edited manually; monitor created by a newer Uptime Kuma version then opened in an older one; a plugin monitor type whose plugin failed to load.","solutions":["Confirm the monitor type is supported by your installed Uptime Kuma version","If the type comes from a plugin, ensure the plugin is enabled and loaded","Correct the type via the UI, or recreate the monitor; fix the DB row if it was hand-edited"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const known = new Set([\"http\",\"keyword\",\"json-query\",\"push\",\"ping\",\"docker\",\"kafka-producer\", ...Object.keys(UptimeKumaServer.monitorTypeList)]);\nif (!known.has(monitor.type)) throw new Error(`Unsupported monitor type: ${monitor.type}`);","typeGuard":"function isKnownMonitorType(type) {\n  return [\n    \"http\",\"keyword\",\"json-query\",\"push\",\"ping\",\"docker\",\"kafka-producer\"\n  ].includes(type) || type in UptimeKumaServer.monitorTypeList;\n}","tryCatchPattern":null,"preventionTips":["Do not hand-edit the monitor type column","When downgrading Uptime Kuma, back up and remove monitors of unsupported types first"],"tags":["monitor-type","config","database"],"backgroundTag":null,"analyzedSha":"6b5ea0155793e666666745fb8d6fef1e829543a2","analyzedAt":"2026-08-12T23:42:12.959Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}