Added maintenance to db and gql #424
This commit is contained in:
parent
a7c833b9db
commit
e1258151de
@ -11,6 +11,7 @@ from bot_api.api_thread import ApiThread
|
|||||||
from bot_core.abc.task_abc import TaskABC
|
from bot_core.abc.task_abc import TaskABC
|
||||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
||||||
|
from bot_core.environment_variables import MAINTENANCE
|
||||||
from bot_core.service.data_integrity_service import DataIntegrityService
|
from bot_core.service.data_integrity_service import DataIntegrityService
|
||||||
|
|
||||||
|
|
||||||
@ -58,7 +59,7 @@ class Application(DiscordBotApplicationABC):
|
|||||||
return
|
return
|
||||||
|
|
||||||
self._logger.info(__name__, f"Try to start {DiscordBotService.__name__}")
|
self._logger.info(__name__, f"Try to start {DiscordBotService.__name__}")
|
||||||
if not self._config.get_configuration("MAINTENANCE"):
|
if not self._config.get_configuration(MAINTENANCE):
|
||||||
for task in self._tasks:
|
for task in self._tasks:
|
||||||
await self._bot.add_cog(task)
|
await self._bot.add_cog(task)
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ from cpl_core.dependency_injection import ServiceCollectionABC
|
|||||||
from cpl_core.environment import ApplicationEnvironmentABC
|
from cpl_core.environment import ApplicationEnvironmentABC
|
||||||
|
|
||||||
from bot_core.configuration.bot_logging_settings import BotLoggingSettings
|
from bot_core.configuration.bot_logging_settings import BotLoggingSettings
|
||||||
|
from bot_core.environment_variables import MAINTENANCE
|
||||||
|
|
||||||
|
|
||||||
class StartupSettingsExtension(StartupExtensionABC):
|
class StartupSettingsExtension(StartupExtensionABC):
|
||||||
@ -20,7 +21,7 @@ class StartupSettingsExtension(StartupExtensionABC):
|
|||||||
configuration.add_environment_variables("SDB_")
|
configuration.add_environment_variables("SDB_")
|
||||||
configuration.add_environment_variables("DISCORD_")
|
configuration.add_environment_variables("DISCORD_")
|
||||||
configuration.add_configuration(
|
configuration.add_configuration(
|
||||||
"MAINTENANCE", configuration.get_configuration("MAINTENANCE") in [True, "true", "True"]
|
MAINTENANCE, configuration.get_configuration(MAINTENANCE) in [True, "true", "True"]
|
||||||
)
|
)
|
||||||
configuration.add_configuration(
|
configuration.add_configuration(
|
||||||
"MIGRATION_ONLY", configuration.get_configuration("MIGRATION_ONLY") in [True, "true", "True"]
|
"MIGRATION_ONLY", configuration.get_configuration("MIGRATION_ONLY") in [True, "true", "True"]
|
||||||
|
@ -6,6 +6,7 @@ from cpl_core.dependency_injection import ServiceProviderABC
|
|||||||
from cpl_discord.service import DiscordBotServiceABC
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from bot_core.environment_variables import MAINTENANCE
|
||||||
from bot_core.logging.task_logger import TaskLogger
|
from bot_core.logging.task_logger import TaskLogger
|
||||||
|
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ class TaskABC(commands.Cog):
|
|||||||
|
|
||||||
@ServiceProviderABC.inject
|
@ServiceProviderABC.inject
|
||||||
def _is_maintenance(self, config: ConfigurationABC) -> bool:
|
def _is_maintenance(self, config: ConfigurationABC) -> bool:
|
||||||
return config.get_configuration("MAINTENANCE") is True
|
return config.get_configuration(MAINTENANCE) is True
|
||||||
|
|
||||||
@ServiceProviderABC.inject
|
@ServiceProviderABC.inject
|
||||||
async def _wait_until_ready(self, config: ConfigurationABC, logger: TaskLogger, bot: DiscordBotServiceABC):
|
async def _wait_until_ready(self, config: ConfigurationABC, logger: TaskLogger, bot: DiscordBotServiceABC):
|
||||||
|
@ -7,6 +7,7 @@ from cpl_discord.service import DiscordBotServiceABC
|
|||||||
from cpl_translation import TranslatePipe
|
from cpl_translation import TranslatePipe
|
||||||
|
|
||||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
|
from bot_core.abc.client_utils_abc import ClientUtilsABC
|
||||||
|
from bot_core.environment_variables import MAINTENANCE
|
||||||
|
|
||||||
|
|
||||||
class CoreExtensionOnReadyEvent(OnReadyABC):
|
class CoreExtensionOnReadyEvent(OnReadyABC):
|
||||||
@ -30,7 +31,7 @@ class CoreExtensionOnReadyEvent(OnReadyABC):
|
|||||||
|
|
||||||
async def on_ready(self):
|
async def on_ready(self):
|
||||||
self._logger.debug(__name__, f"Module {type(self)} started")
|
self._logger.debug(__name__, f"Module {type(self)} started")
|
||||||
if self._config.get_configuration("MAINTENANCE"):
|
if self._config.get_configuration(MAINTENANCE):
|
||||||
await self._client_utils.presence_game("common.presence.maintenance")
|
await self._client_utils.presence_game("common.presence.maintenance")
|
||||||
else:
|
else:
|
||||||
await self._client_utils.presence_game("common.presence.running")
|
await self._client_utils.presence_game("common.presence.running")
|
||||||
|
1
bot/src/bot_core/environment_variables.py
Normal file
1
bot/src/bot_core/environment_variables.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
MAINTENANCE = "MAINTENANCE"
|
@ -24,12 +24,11 @@ class EventChecks:
|
|||||||
if not result:
|
if not result:
|
||||||
|
|
||||||
def empty(*args, **kwargs):
|
def empty(*args, **kwargs):
|
||||||
pass
|
return
|
||||||
|
|
||||||
return empty
|
return empty
|
||||||
return await func(*args, **kwargs)
|
return await func(*args, **kwargs)
|
||||||
|
|
||||||
# return commands.check(check_if_bot_is_ready)
|
|
||||||
check_if_bot_is_ready.__name__ = func.__name__
|
check_if_bot_is_ready.__name__ = func.__name__
|
||||||
sig = inspect.signature(func)
|
sig = inspect.signature(func)
|
||||||
check_if_bot_is_ready.__signature__ = sig.replace(parameters=tuple(sig.parameters.values())[1:])
|
check_if_bot_is_ready.__signature__ = sig.replace(parameters=tuple(sig.parameters.values())[1:])
|
||||||
|
@ -16,6 +16,7 @@ from bot_core.abc.client_utils_abc import ClientUtilsABC
|
|||||||
from bot_core.abc.message_service_abc import MessageServiceABC
|
from bot_core.abc.message_service_abc import MessageServiceABC
|
||||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings
|
||||||
|
from bot_core.environment_variables import MAINTENANCE
|
||||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
||||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||||
from bot_data.abc.user_joined_voice_channel_repository_abc import (
|
from bot_data.abc.user_joined_voice_channel_repository_abc import (
|
||||||
@ -87,7 +88,7 @@ class ClientUtilsService(ClientUtilsABC):
|
|||||||
return client
|
return client
|
||||||
|
|
||||||
async def check_if_bot_is_ready_yet(self) -> bool:
|
async def check_if_bot_is_ready_yet(self) -> bool:
|
||||||
if self._config.get_configuration("MAINTENANCE"):
|
if self._config.get_configuration(MAINTENANCE):
|
||||||
self._logger.warn(
|
self._logger.warn(
|
||||||
__name__,
|
__name__,
|
||||||
f"Bot is in maintenance mode",
|
f"Bot is in maintenance mode",
|
||||||
|
@ -6,6 +6,7 @@ CREATE TABLE IF NOT EXISTS `CFG_TechnicianHistory`
|
|||||||
`WaitForShutdown` BIGINT NOT NULL DEFAULT 8,
|
`WaitForShutdown` BIGINT NOT NULL DEFAULT 8,
|
||||||
`CacheMaxMessages` BIGINT NOT NULL DEFAULT 1000000,
|
`CacheMaxMessages` BIGINT NOT NULL DEFAULT 1000000,
|
||||||
`MaxSteamOfferCount` BIGINT NOT NULL DEFAULT 250,
|
`MaxSteamOfferCount` BIGINT NOT NULL DEFAULT 250,
|
||||||
|
`Maintenance` BOOLEAN DEFAULT FALSE,
|
||||||
`FeatureFlags` JSON NULL DEFAULT ('{}'),
|
`FeatureFlags` JSON NULL DEFAULT ('{}'),
|
||||||
`Deleted` BOOL DEFAULT FALSE,
|
`Deleted` BOOL DEFAULT FALSE,
|
||||||
`DateFrom` DATETIME(6) NOT NULL,
|
`DateFrom` DATETIME(6) NOT NULL,
|
||||||
@ -25,6 +26,7 @@ BEGIN
|
|||||||
`WaitForShutdown`,
|
`WaitForShutdown`,
|
||||||
`CacheMaxMessages`,
|
`CacheMaxMessages`,
|
||||||
`MaxSteamOfferCount`,
|
`MaxSteamOfferCount`,
|
||||||
|
`Maintenance`,
|
||||||
`FeatureFlags`,
|
`FeatureFlags`,
|
||||||
`DateFrom`,
|
`DateFrom`,
|
||||||
`DateTo`)
|
`DateTo`)
|
||||||
@ -34,6 +36,7 @@ BEGIN
|
|||||||
OLD.WaitForShutdown,
|
OLD.WaitForShutdown,
|
||||||
OLD.CacheMaxMessages,
|
OLD.CacheMaxMessages,
|
||||||
OLD.MaxSteamOfferCount,
|
OLD.MaxSteamOfferCount,
|
||||||
|
OLD.Maintenance,
|
||||||
OLD.FeatureFlags,
|
OLD.FeatureFlags,
|
||||||
OLD.LastModifiedAt,
|
OLD.LastModifiedAt,
|
||||||
CURRENT_TIMESTAMP(6));
|
CURRENT_TIMESTAMP(6));
|
||||||
@ -52,6 +55,7 @@ BEGIN
|
|||||||
`WaitForShutdown`,
|
`WaitForShutdown`,
|
||||||
`CacheMaxMessages`,
|
`CacheMaxMessages`,
|
||||||
`MaxSteamOfferCount`,
|
`MaxSteamOfferCount`,
|
||||||
|
`Maintenance`,
|
||||||
`FeatureFlags`,
|
`FeatureFlags`,
|
||||||
`Deleted`,
|
`Deleted`,
|
||||||
`DateFrom`,
|
`DateFrom`,
|
||||||
@ -62,6 +66,7 @@ BEGIN
|
|||||||
OLD.WaitForShutdown,
|
OLD.WaitForShutdown,
|
||||||
OLD.CacheMaxMessages,
|
OLD.CacheMaxMessages,
|
||||||
OLD.MaxSteamOfferCount,
|
OLD.MaxSteamOfferCount,
|
||||||
|
OLD.Maintenance,
|
||||||
OLD.FeatureFlags,
|
OLD.FeatureFlags,
|
||||||
TRUE,
|
TRUE,
|
||||||
OLD.LastModifiedAt,
|
OLD.LastModifiedAt,
|
||||||
|
51
bot/src/bot_data/migration/maintenance_mode_migration.py
Normal file
51
bot/src/bot_data/migration/maintenance_mode_migration.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
from bot_core.logging.database_logger import DatabaseLogger
|
||||||
|
from bot_data.abc.migration_abc import MigrationABC
|
||||||
|
from bot_data.db_context import DBContext
|
||||||
|
|
||||||
|
|
||||||
|
class MaintenanceModeMigration(MigrationABC):
|
||||||
|
name = "1.2.0_MaintenanceModeMigration"
|
||||||
|
|
||||||
|
def __init__(self, logger: DatabaseLogger, db: DBContext):
|
||||||
|
MigrationABC.__init__(self)
|
||||||
|
self._logger = logger
|
||||||
|
self._db = db
|
||||||
|
self._cursor = db.cursor
|
||||||
|
|
||||||
|
def upgrade(self):
|
||||||
|
self._logger.debug(__name__, "Running upgrade")
|
||||||
|
|
||||||
|
self._cursor.execute(
|
||||||
|
str(
|
||||||
|
f"""
|
||||||
|
ALTER TABLE CFG_Technician
|
||||||
|
ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount;
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self._cursor.execute(
|
||||||
|
str(
|
||||||
|
f"""
|
||||||
|
ALTER TABLE CFG_TechnicianHistory
|
||||||
|
ADD Maintenance BOOLEAN DEFAULT FALSE AFTER MaxSteamOfferCount;
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self._exec(__file__, "config/technician.sql")
|
||||||
|
|
||||||
|
def downgrade(self):
|
||||||
|
self._cursor.execute(
|
||||||
|
str(
|
||||||
|
f"""
|
||||||
|
ALTER TABLE CFG_Technician DROP COLUMN Maintenance;
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self._cursor.execute(
|
||||||
|
str(
|
||||||
|
f"""
|
||||||
|
ALTER TABLE CFG_TechnicianHistory DROP COLUMN Maintenance;
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
@ -16,6 +16,7 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
|
|||||||
wait_for_shutdown: int,
|
wait_for_shutdown: int,
|
||||||
cache_max_messages: int,
|
cache_max_messages: int,
|
||||||
max_steam_offer_count: int,
|
max_steam_offer_count: int,
|
||||||
|
maintenance: bool,
|
||||||
feature_flags: dict[FeatureFlagsEnum],
|
feature_flags: dict[FeatureFlagsEnum],
|
||||||
technician_ids: List[int],
|
technician_ids: List[int],
|
||||||
ping_urls: List[str],
|
ping_urls: List[str],
|
||||||
@ -29,6 +30,8 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
|
|||||||
self._wait_for_shutdown = wait_for_shutdown
|
self._wait_for_shutdown = wait_for_shutdown
|
||||||
self._cache_max_messages = cache_max_messages
|
self._cache_max_messages = cache_max_messages
|
||||||
self._max_steam_offer_count = max_steam_offer_count
|
self._max_steam_offer_count = max_steam_offer_count
|
||||||
|
self._maintenance = maintenance
|
||||||
|
|
||||||
self._feature_flags = feature_flags
|
self._feature_flags = feature_flags
|
||||||
self._technician_ids = technician_ids
|
self._technician_ids = technician_ids
|
||||||
self._ping_urls = ping_urls
|
self._ping_urls = ping_urls
|
||||||
@ -105,6 +108,14 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
|
|||||||
def ping_urls(self, value: List[str]):
|
def ping_urls(self, value: List[str]):
|
||||||
self._ping_urls = value
|
self._ping_urls = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def maintenance(self) -> bool:
|
||||||
|
return self._maintenance
|
||||||
|
|
||||||
|
@maintenance.setter
|
||||||
|
def maintenance(self, value: bool):
|
||||||
|
self._maintenance = value
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_select_all_string() -> str:
|
def get_select_all_string() -> str:
|
||||||
return str(
|
return str(
|
||||||
|
@ -11,6 +11,7 @@ from bot_api.exception.service_error_code_enum import ServiceErrorCode
|
|||||||
from bot_api.exception.service_exception import ServiceException
|
from bot_api.exception.service_exception import ServiceException
|
||||||
from bot_api.route.route import Route
|
from bot_api.route.route import Route
|
||||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||||
|
from bot_core.environment_variables import MAINTENANCE
|
||||||
from bot_data.model.achievement import Achievement
|
from bot_data.model.achievement import Achievement
|
||||||
from bot_data.model.auth_role_enum import AuthRoleEnum
|
from bot_data.model.auth_role_enum import AuthRoleEnum
|
||||||
from bot_data.model.auth_user import AuthUser
|
from bot_data.model.auth_user import AuthUser
|
||||||
@ -93,7 +94,7 @@ class QueryABC(ObjectType):
|
|||||||
if permissions.is_member_technician(guild.get_member(u.discord_id)):
|
if permissions.is_member_technician(guild.get_member(u.discord_id)):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if config.get_configuration("MAINTENANCE"):
|
if config.get_configuration(MAINTENANCE):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
access = False
|
access = False
|
||||||
@ -242,11 +243,11 @@ class QueryABC(ObjectType):
|
|||||||
match permission:
|
match permission:
|
||||||
case UserRoleEnum.moderator:
|
case UserRoleEnum.moderator:
|
||||||
can_edit = permissions.is_member_moderator
|
can_edit = permissions.is_member_moderator
|
||||||
if config.get_configuration("MAINTENANCE"):
|
if config.get_configuration(MAINTENANCE):
|
||||||
can_edit = lambda x: False
|
can_edit = lambda x: False
|
||||||
case UserRoleEnum.admin:
|
case UserRoleEnum.admin:
|
||||||
can_edit = permissions.is_member_admin
|
can_edit = permissions.is_member_admin
|
||||||
if config.get_configuration("MAINTENANCE"):
|
if config.get_configuration(MAINTENANCE):
|
||||||
can_edit = lambda x: False
|
can_edit = lambda x: False
|
||||||
case UserRoleEnum.technician:
|
case UserRoleEnum.technician:
|
||||||
can_edit = permissions.is_member_technician
|
can_edit = permissions.is_member_technician
|
||||||
|
@ -5,6 +5,7 @@ type TechnicianConfig implements TableWithHistoryQuery {
|
|||||||
waitForShutdown: Int
|
waitForShutdown: Int
|
||||||
cacheMaxMessages: Int
|
cacheMaxMessages: Int
|
||||||
maxSteamOfferCount: Int
|
maxSteamOfferCount: Int
|
||||||
|
maintenance: Boolean
|
||||||
featureFlagCount: Int
|
featureFlagCount: Int
|
||||||
featureFlags: [FeatureFlag]
|
featureFlags: [FeatureFlag]
|
||||||
pingURLs: [String]
|
pingURLs: [String]
|
||||||
@ -25,6 +26,7 @@ type TechnicianConfigHistory implements HistoryTableQuery {
|
|||||||
waitForShutdown: Int
|
waitForShutdown: Int
|
||||||
cacheMaxMessages: Int
|
cacheMaxMessages: Int
|
||||||
maxSteamOfferCount: Int
|
maxSteamOfferCount: Int
|
||||||
|
maintenance: Boolean
|
||||||
featureFlagCount: Int
|
featureFlagCount: Int
|
||||||
featureFlags: [FeatureFlag]
|
featureFlags: [FeatureFlag]
|
||||||
|
|
||||||
@ -62,6 +64,7 @@ input TechnicianConfigInput {
|
|||||||
waitForShutdown: Int
|
waitForShutdown: Int
|
||||||
cacheMaxMessages: Int
|
cacheMaxMessages: Int
|
||||||
maxSteamOfferCount: Int
|
maxSteamOfferCount: Int
|
||||||
|
maintenance: Boolean
|
||||||
featureFlags: [FeatureFlagInput]
|
featureFlags: [FeatureFlagInput]
|
||||||
pingURLs: [String]
|
pingURLs: [String]
|
||||||
technicianIds: [String]
|
technicianIds: [String]
|
||||||
|
@ -62,6 +62,9 @@ class TechnicianConfigMutation(QueryABC):
|
|||||||
technician_config.max_steam_offer_count = (
|
technician_config.max_steam_offer_count = (
|
||||||
input["maxSteamOfferCount"] if "maxSteamOfferCount" in input else technician_config.max_steam_offer_count
|
input["maxSteamOfferCount"] if "maxSteamOfferCount" in input else technician_config.max_steam_offer_count
|
||||||
)
|
)
|
||||||
|
technician_config.max_steam_offer_count = (
|
||||||
|
input["maintenance"] if "maintenance" in input else technician_config.maintenance
|
||||||
|
)
|
||||||
old_feature_flags = technician_config.feature_flags
|
old_feature_flags = technician_config.feature_flags
|
||||||
technician_config.feature_flags = (
|
technician_config.feature_flags = (
|
||||||
dict(
|
dict(
|
||||||
|
Loading…
Reference in New Issue
Block a user