Compare commits

...

2 Commits

Author SHA1 Message Date
9035396156 Allow filtering by domain 2024-12-19 18:54:44 -05:00
d83831620a Make device-class not required 2024-12-19 18:54:44 -05:00

View File

@ -66,6 +66,7 @@ class AttributeFilter:
class Entities(nagiosplugin.Resource): class Entities(nagiosplugin.Resource):
url: str url: str
token: str token: str
domain: str
device_class: str device_class: str
numeric: bool numeric: bool
area: str area: str
@ -142,13 +143,19 @@ class Entities(nagiosplugin.Resource):
name, name,
value, value,
uom, uom,
context=self.device_class, context="scalar_entities" if self.numeric else "text_entities",
min=self.min, min=self.min,
max=self.max, max=self.max,
) )
def probe(self): def probe(self):
template_filter = f"states|selectattr('attributes.device_class', 'eq', '{ self.device_class }')" template_filter = "states"
if self.domain:
template_filter += f"|selectattr('domain', 'eq', '{ self.domain }')"
if self.device_class:
template_filter += (
f"|selectattr('attributes.device_class', 'eq', '{ self.device_class }')"
)
for f in self.filters: for f in self.filters:
op = "ne" if f.negated else "eq" op = "ne" if f.negated else "eq"
template_filter += ( template_filter += (
@ -347,11 +354,17 @@ def main():
common_args = shared_parser.add_argument_group( common_args = shared_parser.add_argument_group(
"Common Arguments", "Arguments shared between metric types" "Common Arguments", "Arguments shared between metric types"
) )
common_args.add_argument(
"--domain",
type=str,
required=False,
help="domain of entities to monitor",
)
common_args.add_argument( common_args.add_argument(
"-d", "-d",
"--device-class", "--device-class",
type=str, type=str,
required=True, required=False,
help="device class of entities to monitor", help="device class of entities to monitor",
) )
common_args.add_argument( common_args.add_argument(
@ -449,6 +462,7 @@ def main():
args = argp.parse_args() args = argp.parse_args()
parsed_common_args = { parsed_common_args = {
"domain": args.domain,
"device_class": args.device_class, "device_class": args.device_class,
"attribute": args.attribute, "attribute": args.attribute,
"filters": args.filter, "filters": args.filter,
@ -469,7 +483,7 @@ def main():
max=args.max, max=args.max,
**parsed_common_args, **parsed_common_args,
), ),
ScalarOrUnknownContext(args.device_class, args.warning, args.critical), ScalarOrUnknownContext("scalar_entities", args.warning, args.critical),
) )
elif args.subparser_name == "text": elif args.subparser_name == "text":
check = nagiosplugin.Check( check = nagiosplugin.Check(
@ -479,7 +493,7 @@ def main():
numeric=False, numeric=False,
**parsed_common_args, **parsed_common_args,
), ),
RegexContext(args.device_class, args.ok, args.warning, args.critical), RegexContext("text_entities", args.ok, args.warning, args.critical),
) )
check.main(args.verbose) check.main(args.verbose)