diff --git a/src/everything/everything.ts b/src/everything/everything.ts index d40948a4..8ee80bf2 100644 --- a/src/everything/everything.ts +++ b/src/everything/everything.ts @@ -9,6 +9,7 @@ import { ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ListToolsRequestSchema, + LoggingLevel, ReadResourceRequestSchema, Resource, SetLevelRequestSchema, @@ -100,9 +101,8 @@ export const createServer = () => { let subscriptions: Set = new Set(); let subsUpdateInterval: NodeJS.Timeout | undefined; - let logsUpdateInterval: NodeJS.Timeout | undefined; - // Set up update interval for subscribed resources + subsUpdateInterval = setInterval(() => { for (const uri of subscriptions) { server.notification({ @@ -112,21 +112,34 @@ export const createServer = () => { } }, 5000); + let logLevel: LoggingLevel = "debug"; + let logsUpdateInterval: NodeJS.Timeout | undefined; + const messages = [ + {level: "debug", data: "Debug-level message"}, + {level: "info", data: "Info-level message"}, + {level: "notice", data: "Notice-level message"}, + {level: "warning", data: "Warning-level message"}, + {level: "error", data: "Error-level message"}, + {level: "critical", data: "Critical-level message"}, + {level: "alert", data: "Alert level-message"}, + {level: "emergency", data: "Emergency-level message"} + ] + + const isMessageIgnored = (level:LoggingLevel):boolean => { + const currentLevel = messages.findIndex((msg) => logLevel === msg.level); + const messageLevel = messages.findIndex((msg) => level === msg.level); + return messageLevel < currentLevel; + } + // Set up update interval for random log messages logsUpdateInterval = setInterval(() => { - const messages = [ - {level: "info", data: "Information is good"}, - {level: "warning", data: "Warning is scary"}, - {level: "error", data: "Error is bad"}, - ] - server.notification({ + let message = { method: "notifications/message", - params: messages[Math.floor(Math.random()*3)], - }); + params: messages[Math.floor(Math.random() * messages.length)], + } + if (!isMessageIgnored(message.params.level as LoggingLevel)) server.notification(message); }, 15000); - - // Helper method to request sampling from client const requestSampling = async ( context: string, @@ -549,6 +562,7 @@ export const createServer = () => { server.setRequestHandler(SetLevelRequestSchema, async (request) => { const { level } = request.params; + logLevel = level; // Demonstrate different log levels await server.notification({ @@ -556,7 +570,7 @@ export const createServer = () => { params: { level: "debug", logger: "test-server", - data: `Logging level set to: ${level}`, + data: `Logging level set to: ${logLevel}`, }, });