"@angular/platform-browser": "15.2.9",
"@angular/platform-browser-dynamic": "15.2.9",
"@angular/router": "15.2.9",
+ "@carbon/icons": "11.41.0",
+ "@carbon/styles": "1.57.0",
"@circlon/angular-tree-component": "10.0.0",
+ "@ibm/plex": "6.4.0",
"@ng-bootstrap/ng-bootstrap": "14.2.0",
"@ngx-formly/bootstrap": "6.1.1",
"@ngx-formly/core": "6.1.1",
"@types/file-saver": "2.0.1",
"async-mutex": "0.2.4",
"bootstrap": "5.2.3",
+ "carbon-components-angular": "5.25.1",
"chart.js": "4.4.0",
"chartjs-adapter-moment": "1.0.1",
"detect-browser": "5.2.0",
"resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz",
"integrity": "sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w=="
},
+ "node_modules/@carbon/colors": {
+ "version": "11.22.0",
+ "resolved": "https://registry.npmjs.org/@carbon/colors/-/colors-11.22.0.tgz",
+ "integrity": "sha512-IRbzstMpIhD1ULhfYhZ5ne7kIKdhQhiMeltWRPw+7wlFB5ezFoX+kX3ILqdz20CkcrpLu+TVKLD79Zv/+4RD6w==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@ibm/telemetry-js": "^1.5.0"
+ }
+ },
+ "node_modules/@carbon/feature-flags": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/@carbon/feature-flags/-/feature-flags-0.20.0.tgz",
+ "integrity": "sha512-OEYrazJa0nEEHbBDyarXIz6kjWgqsJggjbNAcVOxx0Nvma1nZBd+SwXKwdbMkBZagSSC816dV12oZJtr+GIZZg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@ibm/telemetry-js": "^1.5.0"
+ }
+ },
+ "node_modules/@carbon/grid": {
+ "version": "11.23.0",
+ "resolved": "https://registry.npmjs.org/@carbon/grid/-/grid-11.23.0.tgz",
+ "integrity": "sha512-/8SiXzefUdUeIRzMxKB2+xq65knjkDas2TcZj0NS7dnDIEr5HarWTABh/H5b5BTFEJXos3PfEH6X5OUDuK4qpg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@carbon/layout": "^11.22.0",
+ "@ibm/telemetry-js": "^1.5.0"
+ }
+ },
+ "node_modules/@carbon/icon-helpers": {
+ "version": "10.37.0",
+ "resolved": "https://registry.npmjs.org/@carbon/icon-helpers/-/icon-helpers-10.37.0.tgz",
+ "integrity": "sha512-YXed2JUSCGddp3UnY5OffR3W8Pl+dy9a+vfUtYhSLH9TbIEBR6EvYIfvruFMhA8JIVMCUClUqgyMQXM5oMFQ0g=="
+ },
+ "node_modules/@carbon/icons": {
+ "version": "11.41.0",
+ "resolved": "https://registry.npmjs.org/@carbon/icons/-/icons-11.41.0.tgz",
+ "integrity": "sha512-9RGaOnihPQx74yBQ0UnEr9JJ+e2aa/J+tmTG/sZ203q2hfoeMF2PqipwOhNS1fqCnyW1zvsYQNydUsNIDzCqaA==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@ibm/telemetry-js": "^1.5.0"
+ }
+ },
+ "node_modules/@carbon/layout": {
+ "version": "11.22.0",
+ "resolved": "https://registry.npmjs.org/@carbon/layout/-/layout-11.22.0.tgz",
+ "integrity": "sha512-G9HUJhGW+hNfUKyCLUZior5PDz808prB2Xr3vWF/rqNwLIDKhva/wCXBW2Xl0LavzonuibaCavcSYJGDkpDKhw==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@ibm/telemetry-js": "^1.5.0"
+ }
+ },
+ "node_modules/@carbon/motion": {
+ "version": "11.18.0",
+ "resolved": "https://registry.npmjs.org/@carbon/motion/-/motion-11.18.0.tgz",
+ "integrity": "sha512-hVTmRxhXCA+xznXZSTd6m0kmuIRrR8mxnDHvrVKFvN3ksTYDni5Mtx4XNylI4u/fmzyUcvrvVeTHqJ8LbPsDvA==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@ibm/telemetry-js": "^1.5.0"
+ }
+ },
+ "node_modules/@carbon/styles": {
+ "version": "1.57.0",
+ "resolved": "https://registry.npmjs.org/@carbon/styles/-/styles-1.57.0.tgz",
+ "integrity": "sha512-1GOJi0AAAOJXz411e9hoA3DTrK6SXsseSl7BDjQ5cO4ljlqCIPW5JS213yaF4MoYiLw5coDeGP7n6mgfWjbymA==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@carbon/colors": "^11.22.0",
+ "@carbon/feature-flags": "^0.20.0",
+ "@carbon/grid": "^11.23.0",
+ "@carbon/layout": "^11.22.0",
+ "@carbon/motion": "^11.18.0",
+ "@carbon/themes": "^11.35.0",
+ "@carbon/type": "^11.27.0",
+ "@ibm/plex": "6.0.0-next.6",
+ "@ibm/telemetry-js": "^1.5.0"
+ },
+ "peerDependencies": {
+ "sass": "^1.33.0"
+ },
+ "peerDependenciesMeta": {
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@carbon/styles/node_modules/@ibm/plex": {
+ "version": "6.0.0-next.6",
+ "resolved": "https://registry.npmjs.org/@ibm/plex/-/plex-6.0.0-next.6.tgz",
+ "integrity": "sha512-B3uGruTn2rS5gweynLmfSe7yCawSRsJguJJQHVQiqf4rh2RNgJFu8YLE2Zd/JHV0ZXoVMOslcXP2k3hMkxKEyA==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@carbon/themes": {
+ "version": "11.35.0",
+ "resolved": "https://registry.npmjs.org/@carbon/themes/-/themes-11.35.0.tgz",
+ "integrity": "sha512-Sgh8u2JhpOhpfjaj8U2jStmGtLNDGWSLojZdxKl9FnVg1yNe02+IlhnK5bFeCNOGx4dFhrLFIhLtdh9T0Hy8rg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@carbon/colors": "^11.22.0",
+ "@carbon/layout": "^11.22.0",
+ "@carbon/type": "^11.27.0",
+ "@ibm/telemetry-js": "^1.5.0",
+ "color": "^4.0.0"
+ }
+ },
+ "node_modules/@carbon/type": {
+ "version": "11.27.0",
+ "resolved": "https://registry.npmjs.org/@carbon/type/-/type-11.27.0.tgz",
+ "integrity": "sha512-+YsFTKsch8xcdZ7y40K69B+47j86H7u8HEZ9OfymmXfMYAT+73MTfAtwyO3leS9rWGljKIh0h3I+Ga7wxE0Q6w==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@carbon/grid": "^11.23.0",
+ "@carbon/layout": "^11.22.0",
+ "@ibm/telemetry-js": "^1.5.0"
+ }
+ },
+ "node_modules/@carbon/utils-position": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@carbon/utils-position/-/utils-position-1.1.4.tgz",
+ "integrity": "sha512-/01kFPKr+wD2pPd5Uck2gElm3K/+eNxX7lEn2j1NKzzE4+eSZXDfQtLR/UHcvOSgkP+Av42LET6B9h9jXGV+HA=="
+ },
"node_modules/@circlon/angular-tree-component": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/@circlon/angular-tree-component/-/angular-tree-component-10.0.0.tgz",
"node": ">=14"
}
},
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz",
+ "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.0"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz",
+ "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==",
+ "dependencies": {
+ "@floating-ui/core": "^1.0.0",
+ "@floating-ui/utils": "^0.2.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz",
+ "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw=="
+ },
"node_modules/@foliojs-fork/fontkit": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
+ "node_modules/@ibm/plex": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@ibm/plex/-/plex-6.4.0.tgz",
+ "integrity": "sha512-P70hmNoSJhpV6fGG4++JEivoccUVuvkyZoXprsDmPTtv3s6QvL+Q8bK3HFSGmK/VgyLMDptoKPV7b/h/1xaWAw=="
+ },
+ "node_modules/@ibm/telemetry-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@ibm/telemetry-js/-/telemetry-js-1.5.1.tgz",
+ "integrity": "sha512-Hu8iJAy9UGvjWjpMmHTNgekr2+b44nvp37RxSdWogpkSO7bPajR3CbDvb0QWAvJ7KnW+VmB3aDi1rlNsIyrZVw==",
+ "bin": {
+ "ibmtelemetry": "dist/collect.js"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
}
]
},
+ "node_modules/carbon-components-angular": {
+ "version": "5.25.1",
+ "resolved": "https://registry.npmjs.org/carbon-components-angular/-/carbon-components-angular-5.25.1.tgz",
+ "integrity": "sha512-v49djZmcHs47G7wzaS+SQUTqp+vErlHDc4ohbsx29Q+Jq1m6IJSaTUCN9GuQG/lLa7W1se0vS23TOToKwjIbcw==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@carbon/icon-helpers": "10.37.0",
+ "@carbon/icons": "11.14.0",
+ "@carbon/utils-position": "1.1.4",
+ "@floating-ui/dom": "1.6.3",
+ "@ibm/telemetry-js": "^1.5.0",
+ "flatpickr": "4.6.13",
+ "tslib": "2.3.0"
+ },
+ "peerDependencies": {
+ "@carbon/styles": "^1.54.0"
+ }
+ },
+ "node_modules/carbon-components-angular/node_modules/@carbon/icons": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@carbon/icons/-/icons-11.14.0.tgz",
+ "integrity": "sha512-6XaySbscz1ubJ/3GtyXB8qJpcAL8kcIzBA6JZpFCcha43tuB1Kps87ADj/v3yx0sLPxyIzRWgkw2n1bnkAcsNA=="
+ },
+ "node_modules/carbon-components-angular/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ },
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"node": ">=0.10.0"
}
},
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
},
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
"node_modules/color-support": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
"color-support": "bin.js"
}
},
+ "node_modules/color/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
"node_modules/colorette": {
"version": "2.0.20",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/flatpickr": {
+ "version": "4.6.13",
+ "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz",
+ "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw=="
+ },
"node_modules/flatted": {
"version": "3.2.9",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
"simple-concat": "^1.0.0"
}
},
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
"node_modules/simplebar": {
"version": "5.3.9",
"resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.9.tgz",
<div class="cd-navbar-main">
+<cds-header name="Ceph Dashboard">
+ <cds-hamburger (click)="showMenuSidebar = !showMenuSidebar"></cds-hamburger>
+ <cds-header-navigation>
+ <cd-language-selector class="cd-navbar"></cd-language-selector>
+ </cds-header-navigation>
+ <cds-header-global>
+ <cds-header-action>
+ <cd-notifications class="cd-navbar" (click)="toggleRightSidebar()"></cd-notifications>
+ </cds-header-action>
+ <cds-header-action><cd-dashboard-help class="cd-navbar"></cd-dashboard-help></cds-header-action>
+ <cds-header-action><cd-administration class="cd-navbar"></cd-administration></cds-header-action>
+ <cds-header-action><cd-identity class="cd-navbar"></cd-identity></cds-header-action>
+ </cds-header-global>
+</cds-header>
+
<cd-pwd-expiration-notification></cd-pwd-expiration-notification>
<cd-telemetry-notification></cd-telemetry-notification>
<cd-motd></cd-motd>
<cd-notifications-sidebar></cd-notifications-sidebar>
- <div class="cd-navbar-top">
+ <!-- <div class="cd-navbar-top">
<nav class="navbar navbar-expand-md navbar-dark cd-navbar-brand">
<button class="btn btn-link py-0"
(click)="showMenuSidebar = !showMenuSidebar"
</ul>
</div>
</nav>
- </div>
+ </div> -->
<div class="wrapper">
<!-- Content -->
</li>
</ng-template>
- <ng-template #cd_menu>
+ <ng-template #cd_menu2>
<ng-container *ngIf="enabledFeature$ | async as enabledFeature">
<!-- Dashboard -->
<li routerLinkActive="active"
<li routerLinkActive="active"
class="tc_submenuitem tc_submenuitem_admin_configuration"
*ngIf="permissions.configOpt.read">
- <a i18n
- routerLink="/configuration">Configuration</a>
- </li>
- </ul>
- </li>
- </ng-container>
+ <a i18n
+ routerLink="/configuration">Configuration</a>
+ </li>
+ </ul>
+ </li>
+ </ng-container>
+ </ng-template>
+
+ <ng-template #cd_menu>
+ <ng-container *ngIf="enabledFeature$ | async as enabledFeature">
+ <div cdsTheme="theme">
+ <cds-sidenav>
+ <!-- Dashboard -->
+ <cds-sidenav-item routerLinkActive="active" routerLink="/dashboard">
+ <span i18n>
+ <svg cdsIcon="template" icon size="16"></svg>
+ Dashboard</span>
+ </cds-sidenav-item>
+ <!-- Multi-cluster Dashboard -->
+ <cds-sidenav-item routerLinkActive="active" (click)="toggleSubMenu('multiCluster')">
+ <span i18n>
+ <svg cdsIcon="template" icon size="16"></svg>
+ Multi-Cluster</span>
+ </cds-sidenav-item>
+ <!-- Cluster -->
+ <cds-sidenav-menu title="Cluster" *ngIf="permissions.hosts.read || permissions.monitor.read ||
+ permissions.osd.read || permissions.pool.read">
+ <svg cdsIcon="fade" icon size="16"></svg>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/pool" [useRouter]="true" *ngIf="permissions.pool.read"><span i18n >Pools</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/hosts" [useRouter]="true" *ngIf="permissions.hosts.read"><span i18n >Hosts</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/osd" [useRouter]="true" *ngIf="permissions.osd.read"><span i18n >OSDs</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/inventory" [useRouter]="true" *ngIf="permissions.hosts.read"><span i18n >Physical Disks</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/crush-map" [useRouter]="true" *ngIf="permissions.osd.read"><span i18n>CRUSH Map</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/monitor" [useRouter]="true" *ngIf="permissions.monitor.read"><span i18n >Monitors</span></cds-sidenav-item>
+ </cds-sidenav-menu>
+ <!-- Block Storage -->
+ <cds-sidenav-menu title="Block" *ngIf="(permissions.rbdImage.read || permissions.rbdMirroring.read|| permissions.iscsi.read) && (enabledFeature.rbd || enabledFeature.mirroring || enabledFeature.iscsi)">
+ <svg cdsIcon="fade" icon size="16"></svg>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/block/rbd" [useRouter]="true" *ngIf="permissions.rbdImage.read && enabledFeature.rbd"><span i18n>Images</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/block/mirroring" [useRouter]="true" *ngIf="permissions.rbdMirroring.read && enabledFeature.mirroring"><span i18n>Mirroring
+ <small *ngIf="summaryData?.rbd_mirroring?.warnings !== 0"
+ class="badge badge-warning">{{ summaryData?.rbd_mirroring?.warnings }}</small>
+ <small *ngIf="summaryData?.rbd_mirroring?.errors !== 0"
+ class="badge badge-danger">{{ summaryData?.rbd_mirroring?.errors }}</small>
+ </span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/block/iscsi" [useRouter]="true" *ngIf="permissions.iscsi.read && enabledFeature.iscsi"><span i18n>iSCSI</span></cds-sidenav-item>
+ </cds-sidenav-menu>
+ <!-- Object Storage -->
+ <cds-sidenav-menu title="Object" *ngIf="permissions.rgw.read && enabledFeature.rgw">
+ <svg cdsIcon="fade" icon size="16"></svg>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/rgw/overview" [userouter]="true"><span i18n>Overview</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/rgw/bucket" [userouter]="true"><span i18n>Buckets</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/rgw/user" [userouter]="true"><span i18n>Users</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/rgw/multisite" [userouter]="true"><span i18n>Multi-site</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/rgw/daemon" [userouter]="true"><span i18n>Gateways</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/nfs" [useRouter]="true" *ngIf="permissions.nfs.read && enabledFeature.nfs"><span i18n>NFS</span></cds-sidenav-item>
+ </cds-sidenav-menu>
+ <!-- Filesystem -->
+ <cds-sidenav-menu title="File" *ngIf="permissions.nfs.read && enabledFeature.nfs || permissions.cephfs.read && enabledFeature.cephfs">
+ <svg cdsIcon="fade" icon size="16"></svg>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/cephfs" [useRouter]="true" *ngIf="permissions.cephfs.read && enabledFeature.cephfs"><span i18n>File Systems</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/nfs" [useRouter]="true" *ngIf="permissions.nfs.read && enabledFeature.nfs"><span i18n>NFS</span></cds-sidenav-item>
+ </cds-sidenav-menu>
+ <!-- Observability -->
+ <cds-sidenav-menu title="Observability" *ngIf="permissions.log.read || permissions.prometheus.read">
+ <svg cdsIcon="fade" icon size="16"></svg>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/logs" [useRouter]="true" *ngIf="permissions.log.read"><span i18n>Logs</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/monitoring" [useRouter]="true" *ngIf="permissions.log.read"><span i18n>
+ <ng-container>Alerts</ng-container>
+ <small *ngIf="prometheusAlertService.activeCriticalAlerts > 0"
+ class="badge badge-danger ms-1">{{ prometheusAlertService.activeCriticalAlerts }}</small>
+ <small *ngIf="prometheusAlertService.activeWarningAlerts > 0"
+ class="badge badge-warning ms-1">{{ prometheusAlertService.activeWarningAlerts }}</small>
+ </span></cds-sidenav-item>
+ </cds-sidenav-menu>
+ <!-- Administration -->
+ <cds-sidenav-menu title="Administration" *ngIf="permissions.configOpt.read || permissions.hosts.read">
+ <svg cdsIcon="fade" icon size="16"></svg>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/services/" [useRouter]="true" *ngIf="permissions.hosts.read"><span i18n>Services</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/upgrade" [useRouter]="true" *ngIf="permissions.configOpt.read"><span i18n>Upgrade</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/ceph-users" [useRouter]="true" *ngIf="permissions.configOpt.read"><span i18n>Ceph Users</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/mgr-modules" [useRouter]="true" *ngIf="permissions.configOpt.read"><span i18n>Manager Modules</span></cds-sidenav-item>
+ <cds-sidenav-item routerLinkActive="active" routerLink="/configuration" [useRouter]="true" *ngIf="permissions.configOpt.read"><span i18n>Configuration</span></cds-sidenav-item>
+ </cds-sidenav-menu>
+ </cds-sidenav>
+ </div>
+ </ng-container>
</ng-template>
-
-</div>
+</div>
\ No newline at end of file