Skip to content

feat(iam): add activity logs tabs #17215

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<div data-ovh-alert></div>
<log-to-customer-list
data-log-subscription-api-data="$ctrl.logSubscriptionApiData"
data-description="{{:: ('iam_logs_data_streams_description_' + $ctrl.kind) | translate }}"
data-description="{{'iam_logs_data_streams_description' | translate }}"
data-go-back="$ctrl.goBack"
data-tracking-hits="$ctrl.trackingHits"
data-track-click="$ctrl.trackClick"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"iam_logs_data_streams_description_default": "Wenn Sie die Sicherheits-Logs in Ihrem Kunden-Account abonnieren, werden diese auf die Logs Data Platform übertragen. Diese Plattform bietet Zugriff auf erweiterte Funktionen wie die Verwaltung von Warnungen, das Durchführen von Suchen oder die Verwaltung der Aufbewahrung."
"iam_logs_data_streams_description_default": "Wenn Sie die Sicherheits-Logs in Ihrem Kunden-Account abonnieren, werden diese auf die Logs Data Platform übertragen. Diese Plattform bietet Zugriff auf erweiterte Funktionen wie die Verwaltung von Warnungen, das Durchführen von Suchen oder die Verwaltung der Aufbewahrung.",
"iam_logs_data_streams_description": "Wenn Sie die Sicherheits-Logs in Ihrem Kunden-Account abonnieren, werden diese auf die Logs Data Platform übertragen. Diese Plattform bietet Zugriff auf erweiterte Funktionen wie die Verwaltung von Warnungen, das Durchführen von Suchen oder die Verwaltung der Aufbewahrung."
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"iam_logs_data_streams_description_default": "By subscribing to your customer account’s security logs, they will be transferred to the Logs Data Platform. This platform gives you access to advanced features such as alerting, search execution, and retention management."
"iam_logs_data_streams_description_default": "By subscribing to your customer account’s security logs, they will be transferred to the Logs Data Platform. This platform gives you access to advanced features such as alerting, search execution, and retention management.",
"iam_logs_data_streams_description": "By subscribing to your customer account’s security logs, they will be transferred to the Logs Data Platform. This platform gives you access to advanced features such as alerting, search execution, and retention management."
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"iam_logs_data_streams_description_default": "Al suscribirse a los logs de seguridad de su cuenta de cliente, estos serán transferidos a la Logs Data Platform. Esta plataforma le permite acceder a funcionalidades avanzadas como la gestión de las alertas, la ejecución de las búsquedas o la gestión de las retenciones."
"iam_logs_data_streams_description_default": "Al suscribirse a los logs de seguridad de su cuenta de cliente, estos serán transferidos a la Logs Data Platform. Esta plataforma le permite acceder a funcionalidades avanzadas como la gestión de las alertas, la ejecución de las búsquedas o la gestión de las retenciones.",
"iam_logs_data_streams_description": "Al suscribirse a los logs de seguridad de su cuenta de cliente, estos serán transferidos a la Logs Data Platform. Esta plataforma le permite acceder a funcionalidades avanzadas como la gestión de las alertas, la ejecución de las búsquedas o la gestión de las retenciones."
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"iam_logs_data_streams_description_default": "En vous abonnant aux logs de sécurité de votre compte client, ils seront transférés vers la Logs Data Platform. Cette plateforme vous donne accès à des fonctionnalités avancées telles que la gestion des alertes, l'exécution de recherches ou la gestion des rétentions."
"iam_logs_data_streams_description": "En vous abonnant aux logs de sécurité de votre compte client, ils seront transférés vers la Logs Data Platform. Cette plateforme vous donne accès à des fonctionnalités avancées telles que la gestion des alertes, l'exécution de recherches ou la gestion des rétentions."
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"iam_logs_data_streams_description_default": "En vous abonnant aux logs de sécurité de votre compte client, ils seront transférés vers la Logs Data Platform. Cette plateforme vous donne accès à des fonctionnalités avancées telles que la gestion des alertes, l'exécution de recherches ou la gestion des rétentions."
"iam_logs_data_streams_description": "En vous abonnant aux logs de sécurité de votre compte client, ils seront transférés vers la Logs Data Platform. Cette plateforme vous donne accès à des fonctionnalités avancées telles que la gestion des alertes, l'exécution de recherches ou la gestion des rétentions."
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"iam_logs_data_streams_description_default": "Effettuando l’abbonamento ai log di sicurezza del tuo account cliente, questi verranno trasferiti verso Logs Data Platform. Questa piattaforma offre accesso a funzionalità avanzate come configurazione degli alert, esecuzione di ricerche e gestione delle retention."
"iam_logs_data_streams_description_default": "Effettuando l’abbonamento ai log di sicurezza del tuo account cliente, questi verranno trasferiti verso Logs Data Platform. Questa piattaforma offre accesso a funzionalità avanzate come configurazione degli alert, esecuzione di ricerche e gestione delle retention.",
"iam_logs_data_streams_description": "Effettuando l’abbonamento ai log di sicurezza del tuo account cliente, questi verranno trasferiti verso Logs Data Platform. Questa piattaforma offre accesso a funzionalità avanzate come configurazione degli alert, esecuzione di ricerche e gestione delle retention."
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"iam_logs_data_streams_description_default": "Po zasubskrybowaniu logów bezpieczeństwa konta klienta, zostaną one przeniesione do Logs Data Platform. Platforma ta zapewnia dostęp do zaawansowanych funkcji, takich jak zarządzanie alertami, wyszukiwanie lub zarządzanie czasem przechowywania."
"iam_logs_data_streams_description_default": "Po zasubskrybowaniu logów bezpieczeństwa konta klienta, zostaną one przeniesione do Logs Data Platform. Platforma ta zapewnia dostęp do zaawansowanych funkcji, takich jak zarządzanie alertami, wyszukiwanie lub zarządzanie czasem przechowywania.",
"iam_logs_data_streams_description": "Po zasubskrybowaniu logów bezpieczeństwa konta klienta, zostaną one przeniesione do Logs Data Platform. Platforma ta zapewnia dostęp do zaawansowanych funkcji, takich jak zarządzanie alertami, wyszukiwanie lub zarządzanie czasem przechowywania."
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"iam_logs_data_streams_description_default": "Ao subscrever os logs de segurança da sua conta de cliente, estes serão transferidos para a Logs Data Platform. Esta plataforma dá-lhe acesso a funcionalidades avançadas tais como a gestão de alertas, a execução de pesquisas ou a gestão de retenções."
"iam_logs_data_streams_description_default": "Ao subscrever os logs de segurança da sua conta de cliente, estes serão transferidos para a Logs Data Platform. Esta plataforma dá-lhe acesso a funcionalidades avançadas tais como a gestão de alertas, a execução de pesquisas ou a gestão de retenções.",
"iam_logs_data_streams_description": "Ao subscrever os logs de segurança da sua conta de cliente, estes serão transferidos para a Logs Data Platform. Esta plataforma dá-lhe acesso a funcionalidades avançadas tais como a gestão de alertas, a execução de pesquisas ou a gestão de retenções."
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export default /* @ngInject */ ($stateProvider) => {
.then(
(accessPolicyLogsAvailability) =>
!accessPolicyLogsAvailability && {
state: 'iam',
state: 'iam.logs',
},
),
resolve: {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import routing from './activity-logs.routing';
import dataStreams from './data-streams';
import service from './activity-logs.service';

const moduleName = 'ovhManagerIAMActivityLogs';

angular
.module(moduleName, [dataStreams])
.config(routing)
.service('activityLogsService', service);

export default moduleName;
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { IAM_LOGS_TRACKING_HITS } from '../logs.constants';
import { name } from '../../components/logs/live-tail/live-tail.component';
import { URL } from './activity-logs.service';

export default /* @ngInject */ ($stateProvider) => {
$stateProvider.state('iam.logs.activity', {
url: '/activity',
views: { logsView: name },
atInternet: {
rename: IAM_LOGS_TRACKING_HITS.ACTIVITY.LOGS_PAGE,
},
redirectTo: (transition) =>
transition
.injector()
.getAsync('activityLogsAvailability')
.then(
(activityLogAvailability) =>
!activityLogAvailability && {
state: 'iam.logs',
},
),
resolve: {
breadcrumb: /* @ngInject */ ($translate) =>
$translate.instant('iam_activity_logs_label'),
trackingHits: () => IAM_LOGS_TRACKING_HITS.ACTIVITY,
url: () => URL,
apiVersion: /* @ngInject */ (API_VERSION) => API_VERSION.v1,
kind: /* @ngInject */ (logKinds, $state) =>
$state.params.kind || logKinds[0],
description: /* @ngInject */ ($translate, kind) =>
$translate.instant(`iam_activity_logs_description_${kind}`),
goToListingPage: /* @ngInject */ ($state, $transition$) => (params) =>
$state.go('iam.logs.activity.data-streams', {
...$transition$.params(),
...params,
}),
logKinds: /* @ngInject */ (activityLogsService) =>
activityLogsService.getLogKinds(),
},
});
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export const URL = {
LOG: '/me/api/log/url',
LOG_KIND: '/me/api/log/kind',
LOG_SUSBSCRIPTION: '/me/api/log/subscription',
};

export default class IAMActivityLogsService {
/* @ngInject */
constructor($http) {
this.$http = $http;
}

getLogKinds() {
return this.$http.get(URL.LOG_KIND).then(({ data }) => data);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import '@uirouter/angularjs';

import dataStreams from '../../../components/logs/data-streams';
import routing from './activity-data-streams.routing';

const moduleName = 'ovhManagerIAMActivityLogsDataStreams';
angular.module(moduleName, ['ui.router', dataStreams]).config(routing);

export default moduleName;
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { IAM_DATA_STREAMS_TRACKING_HITS } from '../../logs.constants';
import { name } from '../../../components/logs/data-streams/data-streams.component';
import { URL } from '../activity-logs.service';

export default /* @ngInject */ ($stateProvider) => {
$stateProvider.state('iam.logs.activity.data-streams', {
url: '',
params: {
kind: null,
},
views: {
'[email protected]': name,
},
atInternet: {
rename: IAM_DATA_STREAMS_TRACKING_HITS.ACTIVITY.LISTING_PAGE,
},
resolve: {
breadcrumb: () => null,
url: () => URL.LOG_SUSBSCRIPTION,
trackingHits: () => IAM_DATA_STREAMS_TRACKING_HITS.ACTIVITY,
kind: /* @ngInject */ ($transition$) => $transition$.params().kind,
goBack: /* @ngInject */ ($state, kind, trackClick) => () => {
trackClick(IAM_DATA_STREAMS_TRACKING_HITS.ACTIVITY.GO_BACK);
return $state.go('iam.logs.activity', { kind }, { reload: true });
},
},
});
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import '@uirouter/angularjs';
import 'oclazyload';

const moduleName = 'ovhManagerIAMActivityLogsDataStreamsLazyLoading';

angular.module(moduleName, ['oc.lazyLoad', 'ui.router']).config(
/* @ngInject */ ($stateProvider) => {
$stateProvider.state('iam.logs.activity.data-streams.**', {
url: '',
lazyLoad: ($transition$) => {
const $ocLazyLoad = $transition$.injector().get('$ocLazyLoad');

return import('./activity-data-streams.module').then((mod) => {
return $ocLazyLoad.inject(mod.default || mod);
});
},
});
},
);

export default moduleName;
21 changes: 21 additions & 0 deletions packages/manager/modules/iam/src/logs/activity/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import '@uirouter/angularjs';
import 'oclazyload';

const moduleName = 'ovhManagerIAMActivityLogsLazyLoading';

angular.module(moduleName, ['oc.lazyLoad', 'ui.router']).config(
/* @ngInject */ ($stateProvider) => {
$stateProvider.state('iam.logs.activity.**', {
url: '/activity',
lazyLoad: ($transition$) => {
const $ocLazyLoad = $transition$.injector().get('$ocLazyLoad');

return import('./activity-logs.module').then((mod) => {
return $ocLazyLoad.inject(mod.default || mod);
});
},
});
},
);

export default moduleName;
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export default /* @ngInject */ ($stateProvider) => {
.then(
(auditLogAvailability) =>
!auditLogAvailability && {
state: 'iam',
state: 'iam.logs',
},
),
resolve: {
Expand Down
1 change: 1 addition & 0 deletions packages/manager/modules/iam/src/logs/logs.constants.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export const IAM_LOG_KINDS_KEYS = {
default: ['message'],
access: ['message'],
};

export const IAM_LOGS_AUDIT_TRACKING_PREFIX =
Expand Down
2 changes: 2 additions & 0 deletions packages/manager/modules/iam/src/logs/logs.module.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import '@uirouter/angularjs';
import 'angular-translate';
import ovhManagerLogToCustomer from '@ovh-ux/manager-log-to-customer';

import activity from './activity';
import audit from './audit';
import accessPolicy from './access-policy';
import dataStream from '../components/logs/data-streams';
Expand All @@ -20,6 +21,7 @@ angular
ovhManagerLogToCustomer,
dataStream,
liveTail,
activity,
audit,
accessPolicy,
])
Expand Down
29 changes: 20 additions & 9 deletions packages/manager/modules/iam/src/logs/logs.routing.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,27 @@ const redirectTo = (transition) =>
.all([
transition.injector().getAsync('logsAvailability'),
transition.injector().getAsync('auditLogsAvailability'),
transition.injector().getAsync('activityLogsAvailability'),
transition.injector().getAsync('accessPolicyLogsAvailability'),
])
.then(([logsAvailability, auditLogsAvailability]) => {
let state = 'iam.logs.audit';
if (!logsAvailability) {
state = 'iam';
} else if (!auditLogsAvailability) {
state = 'iam.logs.access-policy';
}
return state;
});
.then(
([
auditLogsAvailability,
activityLogsAvailability,
accessPolicyLogsAvailability,
]) => {
if (accessPolicyLogsAvailability) {
return 'iam.logs.access-policy';
}
if (activityLogsAvailability) {
return 'iam.logs.activity';
}
if (auditLogsAvailability) {
return 'iam.logs.audit';
}
return 'iam';
},
);

export default /* @ngInject */ ($stateProvider) => {
$stateProvider.state('iam.logs', {
Expand Down
14 changes: 7 additions & 7 deletions packages/manager/modules/iam/src/logs/logs.template.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
<oui-header data-heading="{{:: 'iam_logs_label' | translate }}">
<oui-header-tabs>
<oui-header-tabs-item
data-state="iam.logs.audit"
data-ng-if="$ctrl.auditLogsAvailability"
><span data-translate="iam_audit_logs_label"></span
data-state="iam.logs.access-policy"
data-ng-if="$ctrl.accessPolicyLogsAvailability"
>
<span data-translate="iam_access_policy_logs_label"></span
></oui-header-tabs-item>
<oui-header-tabs-item
data-state="iam.logs.activity"
Expand All @@ -12,10 +13,9 @@
<span data-translate="iam_activity_logs_label"></span
></oui-header-tabs-item>
<oui-header-tabs-item
data-state="iam.logs.access-policy"
data-ng-if="$ctrl.accessPolicyLogsAvailability"
>
<span data-translate="iam_access_policy_logs_label"></span
data-state="iam.logs.audit"
data-ng-if="$ctrl.auditLogsAvailability"
><span data-translate="iam_audit_logs_label"></span
></oui-header-tabs-item>
</oui-header-tabs>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
"iam_activity_logs_label": "Logs Activity",
"iam_access_policy_logs_label": "Logs der Zugriffsrichtlinien",
"iam_audit_logs_description_default": "Im Folgenden finden Sie die Logs in Echtzeit zu den Sicherheitsaktionen Ihres Kunden-Accounts: Nutzeranmeldevorgänge, Kennwortänderungen, Erstellung und Änderung von Usern und User-Gruppen.",
"iam_access_policy_logs_description_default": "Im Folgenden finden Sie die Logs in Echtzeit zur Bewertung der Zugriffsrichtlinien während der Aktionen an den Ressourcen Ihres Accounts."
"iam_access_policy_logs_description_default": "Im Folgenden finden Sie die Logs in Echtzeit zur Bewertung der Zugriffsrichtlinien während der Aktionen an den Ressourcen Ihres Accounts.",
"iam_activity_logs_description_access": "Nachfolgend finden Sie die Logs in Echtzeit zu den Aktionen im Zusammenhang mit den OVHcloud APIs."
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
"iam_activity_logs_label": "Activity Logs",
"iam_access_policy_logs_label": "Access policy logs",
"iam_audit_logs_description_default": "Below are real-time logs of security-related customer account actions: user login, password change, user and group creation and modification.",
"iam_access_policy_logs_description_default": "Below are real-time logs for reviewing access policies when performing actions on your account resources."
"iam_access_policy_logs_description_default": "Below are real-time logs for reviewing access policies when performing actions on your account resources.",
"iam_activity_logs_description_access": "You can find real-time OVHcloud API activity logs below."
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
"iam_activity_logs_label": "Activity Logs",
"iam_access_policy_logs_label": "Logs de las políticas de acceso",
"iam_audit_logs_description_default": "A continuación se muestran los logs en tiempo real de las acciones relacionadas con la seguridad de su cuenta de cliente: acción de inicio de sesión de los usuarios, cambio de contraseña, creación y modificación de usuarios y grupos de usuarios.",
"iam_access_policy_logs_description_default": "A continuación se muestran los logs en tiempo real de la evaluación de las políticas de acceso durante las acciones sobre los recursos de su cuenta."
"iam_access_policy_logs_description_default": "A continuación se muestran los logs en tiempo real de la evaluación de las políticas de acceso durante las acciones sobre los recursos de su cuenta.",
"iam_activity_logs_description_access": "A continuación se muestran los logs en tiempo real de las acciones relacionadas con las API OVHcloud."
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{
"iam_logs_label": "Identity Logs",
"iam_audit_logs_label": "Logs Audit",
"iam_audit_logs_label": "Logs d'Audit",
"iam_audit_logs_description_default": "Vous trouverez ci-dessous les logs en temps réel des actions liées à la sécurité de votre compte client : action de connexion des utilisateurs, changement de mot de passe, création et modification d'utilisateurs et de groupes d'utilisateurs.",
"iam_activity_logs_label": "Logs Activity",
"iam_activity_logs_label": "Logs d'Activités",
"iam_activity_logs_description_access": "Vous trouverez ci-dessous les logs en temps réel des actions liées aux API OVHcloud.",
"iam_access_policy_logs_label": "Logs des politiques d'accès",
"iam_access_policy_logs_description_default": "Vous trouverez ci-dessous les logs en temps réel de l'évaluation des politiques d'accès lors des actions sur les ressources de votre compte."
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{
"iam_logs_label": "Identity Logs",
"iam_audit_logs_label": "Logs Audit",
"iam_audit_logs_label": "Logs d'Audit",
"iam_audit_logs_description_default": "Vous trouverez ci-dessous les logs en temps réel des actions liées à la sécurité de votre compte client : action de connexion des utilisateurs, changement de mot de passe, création et modification d'utilisateurs et de groupes d'utilisateurs.",
"iam_activity_logs_label": "Logs Activity",
"iam_activity_logs_label": "Logs d'Activités",
"iam_activity_logs_description_access": "Vous trouverez ci-dessous les logs en temps réel des actions liées aux API OVHcloud.",
"iam_access_policy_logs_label": "Logs des politiques d'accès",
"iam_access_policy_logs_description_default": "Vous trouverez ci-dessous les logs en temps réel de l'évaluation des politiques d'accès lors des actions sur les ressources de votre compte."
}
Loading
Loading