[add] category and title whitelists [add] hide_tags

This commit is contained in:
Christian Fraß 2025-05-18 05:42:04 +00:00
parent 7a882e76ea
commit 0ac13808c5
4 changed files with 244 additions and 31 deletions

View file

@ -136,6 +136,7 @@ namespace _munin.conf
smtp_port : int;
smtp_username : string;
smtp_password : string;
sender : string;
receivers : Array<string>;
/**
* in hours
@ -171,7 +172,71 @@ namespace _munin.conf
/**
*/
export type type_conf = type_conf_v3;
type type_conf_v4 = {
sources : Array<
(
{
kind : "ical_feed";
data : {
url : string;
filtration : {
category_whitelist : (null | Array<string>);
category_blacklist : (null | Array<string>);
title_whitelist : (null | Array<string>);
title_blacklist : (null | Array<string>);
}
}
}
)
>;
targets : Array<
(
{
kind : "email";
data : {
smtp_host : string;
smtp_port : int;
smtp_username : string;
smtp_password : string;
sender : string;
receivers : Array<string>;
hide_tags : boolean;
/**
* in hours
*/
reminders : Array<int>;
}
}
|
{
kind : "telegram_bot";
data : {
bot_token : string;
chat_id : int;
hide_tags : boolean;
/**
* in hours
*/
reminders : Array<int>;
}
}
)
>;
settings : {
interval : float;
};
labels : {
head : string;
title : string;
time : string;
location : string;
};
};
/**
*/
export type type_conf = type_conf_v4;
/**
@ -253,6 +318,84 @@ namespace _munin.conf
}
/**
*/
function convert_from_v3(
conf_v3 : type_conf_v3
) : type_conf_v4
{
return {
"sources": conf_v3.sources.map(
source => {
switch (source.kind) {
case "ical_feed": {
return {
"kind": "ical_feed",
"data": {
"url": source.data.url,
"filtration": {
"category_whitelist": null,
"category_blacklist": source.data.filtration.category_blacklist,
"title_whitelist": null,
"title_blacklist": source.data.filtration.category_blacklist,
},
}
};
break;
}
default: {
// return source;
throw (new Error("unhandled source kind: " + source.kind));
break;
}
}
}
),
"targets": conf_v3.targets.map(
target => {
switch (target.kind) {
case "email": {
return {
"kind": "email",
"data": {
"smtp_host": target.data.smtp_host,
"smtp_port": target.data.smtp_port,
"smtp_username": target.data.smtp_username,
"smtp_password": target.data.smtp_password,
"sender": target.data.sender,
"receivers": target.data.receivers,
"hide_tags": false,
"reminders": target.data.reminders,
},
};
break;
}
case "telegram_bot": {
return {
"kind": "telegram_bot",
"data": {
"bot_token": target.data.bot_token,
"chat_id": target.data.chat_id,
"hide_tags": false,
"reminders": target.data.reminders,
},
};
break;
}
default: {
// return target;
throw (new Error("unhandled target kind: " + String(target)));
break;
}
}
}
),
"settings": conf_v3.settings,
"labels": conf_v3.labels,
};
}
/**
*/
function schema_source_kalender_digital(
@ -280,7 +423,7 @@ namespace _munin.conf
"type": "object",
"properties": {
"category_blacklist": {
"nullable": false,
"nullable": true,
"type": "array",
"items": {
"nullable": false,
@ -289,7 +432,7 @@ namespace _munin.conf
"default": [],
},
"title_blacklist": {
"nullable": false,
"nullable": true,
"type": "array",
"items": {
"nullable": false,
@ -345,23 +488,41 @@ namespace _munin.conf
"nullable": false,
"type": "object",
"properties": {
"category_blacklist": {
"nullable": false,
"category_whitelist": {
"nullable": true,
"type": "array",
"items": {
"nullable": false,
"type": "string",
},
"default": [],
"default": null,
},
"category_blacklist": {
"nullable": true,
"type": "array",
"items": {
"nullable": false,
"type": "string",
},
"default": null,
},
"title_whitelist": {
"nullable": true,
"type": "array",
"items": {
"nullable": false,
"type": "string",
},
"default": null,
},
"title_blacklist": {
"nullable": false,
"nullable": true,
"type": "array",
"items": {
"nullable": false,
"type": "string",
},
"default": [],
"default": null,
},
},
"additionalProperties": false,
@ -433,6 +594,11 @@ namespace _munin.conf
"type": "string",
}
},
"hide_tags": {
"nullable": false,
"type": "boolean",
"default": false,
},
"reminders": {
"nullable": false,
"type": "array",
@ -527,6 +693,11 @@ namespace _munin.conf
"nullable": false,
"type": "integer",
},
"hide_tags": {
"nullable": false,
"type": "boolean",
"default": false,
},
"reminders": {
"nullable": false,
"type": "array",
@ -653,7 +824,7 @@ namespace _munin.conf
/**
*/
export function schema(
version : string = "3"
version : string = "4"
) : lib_plankton.conf.type_schema
{
switch (version) {
@ -680,7 +851,8 @@ namespace _munin.conf
break;
}
case "2":
case "3": {
case "3":
case "4": {
return {
"nullable": false,
"type": "object",
@ -714,27 +886,37 @@ namespace _munin.conf
{
"1": {"target": "2", "function": convert_from_v1},
"2": {"target": "3", "function": convert_from_v2},
"3": null,
"3": {"target": "4", "function": convert_from_v3},
"4": null,
}
);
/*
switch (conf_raw.version) {
case "1": {
const conf_v1 : type_conf_v1 = (conf_raw.content as type_conf_v1);
const conf_v2 : type_conf_v2 = convert_from_v1(conf_v1);
const conf_v3 : type_conf_v3 = convert_from_v2(conf_v2);
return conf_v3;
const conf_v4 : type_conf_v4 = convert_from_v3(conf_v3);
return conf_v4;
break;
}
case "2": {
const conf_v2 : type_conf_v2 = (conf_raw.content as type_conf_v2);
const conf_v3 : type_conf_v3 = convert_from_v2(conf_v2);
return conf_v3;
const conf_v4 : type_conf_v4 = convert_from_v3(conf_v3);
return conf_v4;
break;
}
case "3": {
const conf_v3 : type_conf_v3 = (conf_raw.content as type_conf_v3);
return conf_v3;
const conf_v4 : type_conf_v4 = convert_from_v3(conf_v3);
return conf_v4;
break;
}
case "4": {
const conf_v4 : type_conf_v4 = (conf_raw.content as type_conf_v4);
return conf_v4;
break;
}
default: {
@ -742,6 +924,8 @@ namespace _munin.conf
break;
}
}
*/
return (conf_raw.content as type_conf_v4);
}
}

View file

@ -26,8 +26,10 @@ namespace _munin.sources.ical_feed
export type type_parameters = {
url : string;
filtration : {
category_blacklist : Array<string>;
title_blacklist : Array<string>;
category_whitelist : (null | Array<string>);
category_blacklist : (null | Array<string>);
title_whitelist : (null | Array<string>);
title_blacklist : (null | Array<string>);
};
};
@ -56,29 +58,54 @@ namespace _munin.sources.ical_feed
vcalendar.vevents
.filter(
vevent => (
// category
// category whitelist
(
vevent.categories.every(
(parameters.filtration.category_whitelist === null)
||
vevent.categories.some(
category => (
! (
parameters.filtration.category_whitelist
.map(category_ => category_.toLowerCase())
.includes(category.toLowerCase())
)
)
)
&&
// category blacklist
(
(parameters.filtration.category_blacklist === null)
||
vevent.categories.every (
category => ! (
parameters.filtration.category_blacklist
.map(category_ => category_.toLowerCase())
.includes(category.toLowerCase())
)
)
)
)
&&
// title
// title whitelist
(
parameters.filtration.title_blacklist.every(
(parameters.filtration.title_whitelist === null)
||
parameters.filtration.title_whitelist.some(
title => (
! (
vevent.summary.toLowerCase()
.includes(title.toLowerCase())
)
)
)
&&
// title blacklist
(
(parameters.filtration.title_blacklist === null)
||
parameters.filtration.title_blacklist.every(
title => ! (
vevent.summary.toLowerCase()
.includes(title.toLowerCase())
)
)
)
)
)

View file

@ -30,6 +30,7 @@ namespace _munin.targets.email
smtp_password : string;
sender : string;
receivers : Array<string>;
hide_tags : boolean;
/**
* in hours
*/
@ -76,7 +77,7 @@ namespace _munin.targets.email
{
"title_label": labels.title.toUpperCase(),
"macro_tags": (
(event.tags === null)
(parameters.hide_tags || (event.tags === null))
?
""
:

View file

@ -26,6 +26,7 @@ namespace _munin.targets.telegram_bot
export type type_parameters = {
bot_token : string;
chat_id : int;
hide_tags : boolean;
reminders : Array<int>;
};
@ -46,7 +47,7 @@ namespace _munin.targets.telegram_bot
{
"head": labels.head,
"macro_tags": (
(event.tags === null)
(parameters.hide_tags || (event.tags === null))
?
""
: