blob: 5c8385c7116693d3f36a756a8be246b68e4168ea [file] [log] [blame]
import { map } from 'rxjs/operators';
import { Injectable } from '@angular/core';
import * as _ from 'lodash';
import { IdealState } from '../../shared/node-viewer/node-viewer.component';
import { HelixService } from '../../core/helix.service';
import { Resource } from './resource.model';
@Injectable()
export class ResourceService extends HelixService {
public getAll(clusterName: string) {
return this.request(`/clusters/${clusterName}/resources`).pipe(
map((data) => {
const res: Resource[] = [];
for (const name of data.idealStates) {
res.push(<Resource>{
cluster: clusterName,
name,
alive: data.externalViews.indexOf(name) >= 0,
});
}
return _.sortBy(res, 'name');
})
);
}
public getAllOnInstance(clusterName: string, instanceName: string) {
return this.request(
`/clusters/${clusterName}/instances/${instanceName}/resources`
).pipe(
map((data) => {
const res: any[] = [];
if (data) {
for (const resource of data.resources) {
res.push({
name: resource,
});
}
}
return res;
})
);
}
public get(clusterName: string, resourceName: string) {
return this.request(
`/clusters/${clusterName}/resources/${resourceName}`
).pipe(
map(
(data) =>
new Resource(
clusterName,
resourceName,
data.resourceConfig,
data.idealState,
data.externalView
)
)
);
}
public getOnInstance(
clusterName: string,
instanceName: string,
resourceName: string
) {
return this.request(
`/clusters/${clusterName}/instances/${instanceName}/resources/${resourceName}`
).pipe(
map((data) => {
const ret = {
bucketSize: data.simpleFields.BUCKET_SIZE,
sessionId: data.simpleFields.SESSION_ID,
stateModelDef: data.simpleFields.STATE_MODEL_DEF,
stateModelFactoryName: data.simpleFields.STATE_MODEL_FACTORY_NAME,
partitions: [],
};
for (const partition in data.mapFields) {
const par = data.mapFields[partition];
ret.partitions.push({
name: partition,
currentState: par.CURRENT_STATE,
info: par.INFO,
});
}
return ret;
})
);
}
public enable(clusterName: string, resourceName: string) {
return this.post(
`/clusters/${clusterName}/resources/${resourceName}?command=enable`,
null
);
}
public disable(clusterName: string, resourceName: string) {
return this.post(
`/clusters/${clusterName}/resources/${resourceName}?command=disable`,
null
);
}
public remove(clusterName: string, resourceName: string) {
return this.delete(`/clusters/${clusterName}/resources/${resourceName}`);
}
public setIdealState(
clusterName: string,
resourceName: string,
idealState: IdealState
) {
return this.post(
`/clusters/${clusterName}/resources/${resourceName}/idealState?command=update`,
idealState
);
}
}