Skip to content

Commit 0f0ed35

Browse files
committed
Respect log level setting by client
* This fixes #868 * In everything.ts - import LoggingLevel from sdk - add log messages for all levels - add isMessageIgnored function that checks the incoming level against the logLevel and returns false if it is a lower index than the logLevel - in the setInterval for sending dummy logs, only send the message if it is not ignored by the logLevel.
1 parent a835f3c commit 0f0ed35

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

src/everything/everything.ts

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ListResourcesRequestSchema,
1010
ListResourceTemplatesRequestSchema,
1111
ListToolsRequestSchema,
12+
LoggingLevel,
1213
ReadResourceRequestSchema,
1314
Resource,
1415
SetLevelRequestSchema,
@@ -100,9 +101,8 @@ export const createServer = () => {
100101

101102
let subscriptions: Set<string> = new Set();
102103
let subsUpdateInterval: NodeJS.Timeout | undefined;
103-
let logsUpdateInterval: NodeJS.Timeout | undefined;
104-
105104
// Set up update interval for subscribed resources
105+
106106
subsUpdateInterval = setInterval(() => {
107107
for (const uri of subscriptions) {
108108
server.notification({
@@ -112,21 +112,34 @@ export const createServer = () => {
112112
}
113113
}, 5000);
114114

115+
let logLevel: LoggingLevel = "debug";
116+
let logsUpdateInterval: NodeJS.Timeout | undefined;
117+
const messages = [
118+
{level: "debug", data: "Debug-level message"},
119+
{level: "info", data: "Info-level message"},
120+
{level: "notice", data: "Notice-level message"},
121+
{level: "warning", data: "Warning-level message"},
122+
{level: "error", data: "Error-level message"},
123+
{level: "critical", data: "Critical-level message"},
124+
{level: "alert", data: "Alert level-message"},
125+
{level: "emergency", data: "Emergency-level message"}
126+
]
127+
128+
const isMessageIgnored = (level:LoggingLevel):boolean => {
129+
const currentLevel = messages.findIndex((msg) => logLevel === msg.level);
130+
const messageLevel = messages.findIndex((msg) => level === msg.level);
131+
return messageLevel < currentLevel;
132+
}
133+
115134
// Set up update interval for random log messages
116135
logsUpdateInterval = setInterval(() => {
117-
const messages = [
118-
{level: "info", data: "Information is good"},
119-
{level: "warning", data: "Warning is scary"},
120-
{level: "error", data: "Error is bad"},
121-
]
122-
server.notification({
136+
let message = {
123137
method: "notifications/message",
124-
params: messages[Math.floor(Math.random()*3)],
125-
});
138+
params: messages[Math.floor(Math.random() * messages.length)],
139+
}
140+
if (!isMessageIgnored(message.params.level as LoggingLevel)) server.notification(message);
126141
}, 15000);
127142

128-
129-
130143
// Helper method to request sampling from client
131144
const requestSampling = async (
132145
context: string,
@@ -549,14 +562,15 @@ export const createServer = () => {
549562

550563
server.setRequestHandler(SetLevelRequestSchema, async (request) => {
551564
const { level } = request.params;
565+
logLevel = level;
552566

553567
// Demonstrate different log levels
554568
await server.notification({
555569
method: "notifications/message",
556570
params: {
557571
level: "debug",
558572
logger: "test-server",
559-
data: `Logging level set to: ${level}`,
573+
data: `Logging level set to: ${logLevel}`,
560574
},
561575
});
562576

0 commit comments

Comments
 (0)