]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/doc.service.ts
update ceph source to reef 18.2.1
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / services / doc.service.ts
1 import { Injectable } from '@angular/core';
2
3 import { BehaviorSubject, Subscription } from 'rxjs';
4 import { filter, first, map } from 'rxjs/operators';
5
6 import { CephReleaseNamePipe } from '../pipes/ceph-release-name.pipe';
7 import { SummaryService } from './summary.service';
8
9 @Injectable({
10 providedIn: 'root'
11 })
12 export class DocService {
13 private releaseDataSource = new BehaviorSubject<string>(null);
14 releaseData$ = this.releaseDataSource.asObservable();
15
16 constructor(
17 private summaryservice: SummaryService,
18 private cephReleaseNamePipe: CephReleaseNamePipe
19 ) {
20 this.summaryservice.subscribeOnce((summary) => {
21 const releaseName = this.cephReleaseNamePipe.transform(summary.version);
22 this.releaseDataSource.next(releaseName);
23 });
24 }
25
26 urlGenerator(section: string, release = 'main'): string {
27 const docVersion = release === 'main' ? 'latest' : release;
28 const domain = `https://docs.ceph.com/en/${docVersion}/`;
29 const domainCeph = `https://ceph.io`;
30 const domainCephOld = `https://old.ceph.com`;
31
32 const sections = {
33 iscsi: `${domain}mgr/dashboard/#enabling-iscsi-management`,
34 prometheus: `${domain}mgr/dashboard/#enabling-prometheus-alerting`,
35 'nfs-ganesha': `${domain}mgr/dashboard/#configuring-nfs-ganesha-in-the-dashboard`,
36 'rgw-nfs': `${domain}radosgw/nfs`,
37 rgw: `${domain}mgr/dashboard/#enabling-the-object-gateway-management-frontend`,
38 'rgw-multisite': `${domain}/radosgw/multisite/#failover-and-disaster-recovery`,
39 multisite: `${domain}/radosgw/multisite`,
40 dashboard: `${domain}mgr/dashboard`,
41 grafana: `${domain}mgr/dashboard/#enabling-the-embedding-of-grafana-dashboards`,
42 orch: `${domain}mgr/orchestrator`,
43 pgs: `${domainCephOld}/pgcalc`,
44 help: `${domainCeph}/en/users/`,
45 security: `${domainCeph}/en/security/`,
46 trademarks: `${domainCeph}/en/trademarks/`,
47 'dashboard-landing-page-status': `${domain}mgr/dashboard/#dashboard-landing-page-status`,
48 'dashboard-landing-page-performance': `${domain}mgr/dashboard/#dashboard-landing-page-performance`,
49 'dashboard-landing-page-capacity': `${domain}mgr/dashboard/#dashboard-landing-page-capacity`
50 };
51
52 return sections[section];
53 }
54
55 subscribeOnce(
56 section: string,
57 next: (release: string) => void,
58 error?: (error: any) => void
59 ): Subscription {
60 return this.releaseData$
61 .pipe(
62 filter((value) => !!value),
63 map((release) => this.urlGenerator(section, release)),
64 first()
65 )
66 .subscribe(next, error);
67 }
68 }