Compare commits

...

4 Commits

Author SHA1 Message Date
lebaudantoine 6593e449e2 🐛(frontend) prevent Crisp crash when superuser has no email
Fix crash when switching from admin session to app with superuser account
that lacks email field. Add null check to prevent Crisp initialization
errors.
2025-07-20 17:55:38 +02:00
lebaudantoine de6b8e1e22 🌐(frontend) internationalize missing error message
Add translation support for previously untranslated error message to
complete localization coverage.
2025-07-20 17:52:26 +02:00
ericboucher 7ddf9070aa 🚸(frontend) display email with username to clarify logged-in account
Show email alongside full name when available to prevent user confusion
about which account is currently logged in. Enhances general app UX.
2025-07-20 17:45:51 +02:00
lebaudantoine 4eb7f29f8e 🔊(summary) add Celery exporter configuration for monitoring
Enable Celery task lifecycle events and broker dispatch events per
@rouja's exporter requirements. Basic configuration following
documentation without parameterization.
2025-07-17 23:53:09 +02:00
9 changed files with 33 additions and 8 deletions
@@ -10,6 +10,10 @@ export const SettingsDialog = (props: SettingsDialogProps) => {
const { t, i18n } = useTranslation('settings')
const { user, isLoggedIn, logout } = useUser()
const { languagesList, currentLanguage } = useLanguageLabels()
const userDisplay =
user?.full_name && user?.email
? `${user.full_name} (${user.email})`
: user?.email
return (
<Dialog title={t('dialog.heading')} {...props}>
<H lvl={2}>{t('account.heading')}</H>
@@ -18,7 +22,7 @@ export const SettingsDialog = (props: SettingsDialogProps) => {
<P>
<Trans
i18nKey="settings:account.currentlyLoggedAs"
values={{ user: user?.full_name ?? user?.email }}
values={{ user: userDisplay }}
components={[<Badge />]}
/>
</P>
@@ -18,6 +18,10 @@ export const AccountTab = ({ id, onOpenChange }: AccountTabProps) => {
const room = useRoomContext()
const { user, isLoggedIn, logout } = useUser()
const [name, setName] = useState(room?.localParticipant.name ?? '')
const userDisplay =
user?.full_name && user?.email
? `${user.full_name} (${user.email})`
: user?.email
const handleOnSubmit = () => {
if (room) room.localParticipant.setName(name)
@@ -37,7 +41,7 @@ export const AccountTab = ({ id, onOpenChange }: AccountTabProps) => {
value={name}
onChange={setName}
validate={(value) => {
return !value ? <p>{'Votre Nom ne peut pas être vide'}</p> : null
return !value ? <p>{t('account.nameError')}</p> : null
}}
/>
<H lvl={2}>{t('account.authentication')}</H>
@@ -46,7 +50,7 @@ export const AccountTab = ({ id, onOpenChange }: AccountTabProps) => {
<P>
<Trans
i18nKey="settings:account.currentlyLoggedAs"
values={{ user: user?.full_name || user?.email }}
values={{ user: userDisplay }}
components={[<Badge />]}
/>
</P>
@@ -7,7 +7,7 @@ export const initializeSupportSession = (user: ApiUser) => {
if (!Crisp.isCrispInjected()) return
const { id, email } = user
Crisp.setTokenId(`meet-${id}`)
Crisp.user.setEmail(email)
if (email) Crisp.user.setEmail(email)
}
export const terminateSupportSession = () => {
+2 -1
View File
@@ -4,7 +4,8 @@
"heading": "Konto",
"youAreNotLoggedIn": "Sie sind nicht angemeldet.",
"nameLabel": "Ihr Name",
"authentication": "Authentifizierung"
"authentication": "Authentifizierung",
"nameError": "Ihr Name darf nicht leer sein"
},
"audio": {
"microphone": {
+2 -1
View File
@@ -4,7 +4,8 @@
"heading": "Account",
"youAreNotLoggedIn": "You are not logged in.",
"nameLabel": "Your Name",
"authentication": "Authentication"
"authentication": "Authentication",
"nameError": "Your name cannot be empty"
},
"audio": {
"microphone": {
+2 -1
View File
@@ -4,7 +4,8 @@
"heading": "Compte",
"youAreNotLoggedIn": "Vous n'êtes pas connecté.",
"nameLabel": "Votre Nom",
"authentication": "Authentification"
"authentication": "Authentification",
"nameError": "Votre Nom ne peut pas être vide"
},
"audio": {
"microphone": {
+2 -1
View File
@@ -4,7 +4,8 @@
"heading": "Account",
"youAreNotLoggedIn": "U bent niet ingelogd.",
"nameLabel": "Uw naam",
"authentication": "Authenticatie"
"authentication": "Authenticatie",
"nameError": "Uw naam mag niet leeg zijn"
},
"audio": {
"microphone": {
+11
View File
@@ -0,0 +1,11 @@
# https://github.com/danihodovic/celery-exporter
# Enable task events for Prometheus monitoring via celery-exporter.
# worker_send_task_events: Sends task lifecycle events (e.g., started, succeeded, failed),
# allowing the exporter to track task execution metrics and durations.
worker_send_task_events = True
# task_send_sent_event: Sends an event when a task is dispatched to the broker,
# enabling full lifecycle tracking from submission to completion (including queue time).
task_send_sent_event = True
@@ -37,6 +37,8 @@ celery = Celery(
broker_connection_retry_on_startup=True,
)
celery.config_from_object('summary.core.celery_config')
if settings.sentry_dsn and settings.sentry_is_enabled:
@signals.celeryd_init.connect