]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/plugins/motd.py
1 # -*- coding: utf-8 -*-
6 from typing
import Dict
, NamedTuple
, Optional
8 from ceph
.utils
import datetime_now
, datetime_to_str
, parse_timedelta
, str_to_datetime
9 from mgr_module
import CLICommand
11 from . import PLUGIN_MANAGER
as PM
12 from .plugin
import SimplePlugin
as SP
15 class MotdSeverity(Enum
):
21 class MotdData(NamedTuple
):
23 md5
: str # The MD5 of the message.
24 severity
: MotdSeverity
25 expires
: str # The expiration date in ISO 8601. Does not expire if empty.
28 @PM.add_plugin
# pylint: disable=too-many-ancestors
37 desc
='The message of the day'
42 def register_commands(self
):
43 @CLICommand("dashboard {name} get".format(name
=self
.NAME
))
46 value
: str = self
.get_option(self
.NAME
)
48 stdout
= 'No message of the day has been set.'
50 data
= json
.loads(value
)
51 if not data
['expires']:
52 data
['expires'] = "Never"
53 stdout
= 'Message="{message}", severity="{severity}", ' \
54 'expires="{expires}"'.format(**data
)
57 @CLICommand("dashboard {name} set".format(name
=self
.NAME
),
58 "name=severity,type=CephChoices,strings={} ".format(
59 "|".join(s
.value
for s
in MotdSeverity
))
60 + "name=expires,type=CephString "
61 + "name=message,type=CephString")
62 def _set(_
, severity
: str, expires
: str, message
: str):
64 delta
= parse_timedelta(expires
)
66 return 1, '', 'Invalid expires format, use "2h", "10d" or "30s"'
67 expires
= datetime_to_str(datetime_now() + delta
)
70 value
: str = json
.dumps({
72 'md5': hashlib
.md5(message
.encode()).hexdigest(),
76 self
.set_option(self
.NAME
, value
)
77 return 0, 'Message of the day has been set.', ''
79 @CLICommand("dashboard {name} clear".format(name
=self
.NAME
))
81 self
.set_option(self
.NAME
, '')
82 return 0, 'Message of the day has been cleared.', ''
85 def get_controllers(self
):
86 from ..controllers
import RESTController
, UiApiController
88 @UiApiController('/motd')
89 class MessageOfTheDay(RESTController
):
90 def list(_
) -> Optional
[Dict
]: # pylint: disable=no-self-argument
91 value
: str = self
.get_option(self
.NAME
)
94 data
: MotdData
= MotdData(**json
.loads(value
))
95 # Check if the MOTD has been expired.
97 expires
= str_to_datetime(data
.expires
)
98 if expires
< datetime_now():
100 return data
._asdict
()
102 return [MessageOfTheDay
]