1 import { Injectable } from '@angular/core';
3 import { BehaviorSubject, Subscription } from 'rxjs';
4 import { filter, first, map } from 'rxjs/operators';
6 import { CephReleaseNamePipe } from '../pipes/ceph-release-name.pipe';
7 import { SummaryService } from './summary.service';
12 export class DocService {
13 private releaseDataSource = new BehaviorSubject<string>(null);
14 releaseData$ = this.releaseDataSource.asObservable();
17 private summaryservice: SummaryService,
18 private cephReleaseNamePipe: CephReleaseNamePipe
20 this.summaryservice.subscribeOnce((summary) => {
21 const releaseName = this.cephReleaseNamePipe.transform(summary.version);
22 this.releaseDataSource.next(releaseName);
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`;
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`
52 return sections[section];
57 next: (release: string) => void,
58 error?: (error: any) => void
60 return this.releaseData$
62 filter((value) => !!value),
63 map((release) => this.urlGenerator(section, release)),
66 .subscribe(next, error);