diff --git a/experimental/traffic-portal/package-lock.json b/experimental/traffic-portal/package-lock.json index 0eef458c32..e737637804 100644 --- a/experimental/traffic-portal/package-lock.json +++ b/experimental/traffic-portal/package-lock.json @@ -13202,6 +13202,19 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "devOptional": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", diff --git a/experimental/traffic-portal/src/app/api/cache-group.service.ts b/experimental/traffic-portal/src/app/api/cache-group.service.ts index c0d538739b..f1a020dd36 100644 --- a/experimental/traffic-portal/src/app/api/cache-group.service.ts +++ b/experimental/traffic-portal/src/app/api/cache-group.service.ts @@ -228,16 +228,26 @@ export class CacheGroupService extends APIService { return this.post(path, request).toPromise(); } + /** + * Gets all Divisions from Traffic Ops. + * + * @returns The requested Divisions. + */ public async getDivisions(): Promise>; + /** + * Gets a single Division from Traffic Ops. + * + * @param nameOrID Either the name (string) or ID (number) of the single + * Division to be fetched. + * @returns The requested Division. + */ public async getDivisions(nameOrID: string | number): Promise; - /** - * Gets an array of divisions from Traffic Ops. + * Gets a Division or Divisions from Traffic Ops. * * @param nameOrID If given, returns only the Division with the given name * (string) or ID (number). - * @returns An Array of Division objects - or a single Division object if 'nameOrID' - * was given. + * @returns The requested Division or Divisions. */ public async getDivisions(nameOrID?: string | number): Promise | ResponseDivision> { const path = "divisions"; @@ -258,10 +268,10 @@ export class CacheGroupService extends APIService { } /** - * Replaces the current definition of a division with the one given. + * Replaces the current definition of a Division with the one given. * - * @param division The new division. - * @returns The updated division. + * @param division The new Division. + * @returns The updated Division. */ public async updateDivision(division: ResponseDivision): Promise { const path = `divisions/${division.id}`; @@ -279,26 +289,36 @@ export class CacheGroupService extends APIService { } /** - * Deletes an existing division. + * Deletes an existing Division. * * @param division The Division to be deleted, or just its ID. - * @returns The deleted division. + * @returns The deleted Division. */ public async deleteDivision(division: number | ResponseDivision): Promise { const id = typeof(division) === "number" ? division : division.id; return this.delete(`divisions/${id}`).toPromise(); } + /** + * Gets all Regions from Traffic Ops. + * + * @returns The requested Regions. + */ public async getRegions(): Promise>; + /** + * Gets a single Region from Traffic Ops. + * + * @param nameOrID The name (string) or ID (number) of the single Region to + * be fetched. + * @returns The requested Region. + */ public async getRegions(nameOrID: string | number): Promise; - /** - * Gets an array of regions from Traffic Ops. + * Gets a Region or Regions from Traffic Ops. * * @param nameOrID If given, returns only the Region with the given name * (string) or ID (number). - * @returns An Array of Region objects - or a single Region object if 'nameOrID' - * was given. + * @returns The requested Region or Regions. */ public async getRegions(nameOrID?: string | number): Promise | ResponseRegion> { const path = "regions"; @@ -318,10 +338,10 @@ export class CacheGroupService extends APIService { } /** - * Replaces the current definition of a region with the one given. + * Replaces the current definition of a Region with the one given. * - * @param region The new region. - * @returns The updated region. + * @param region The new Region. + * @returns The updated Region. */ public async updateRegion(region: ResponseRegion): Promise { const path = `regions/${region.id}`; @@ -329,7 +349,7 @@ export class CacheGroupService extends APIService { } /** - * Creates a new region. + * Creates a new Region. * * @param region The region to create. * @returns The created region. @@ -339,26 +359,36 @@ export class CacheGroupService extends APIService { } /** - * Deletes an existing region. + * Deletes an existing Region. * - * @param regionOrId Id of the region to delete. - * @returns The deleted region. + * @param regionOrId The ID of the Region to delete. + * @returns The deleted Region. */ public async deleteRegion(regionOrId: number | ResponseRegion): Promise { const id = typeof(regionOrId) === "number" ? regionOrId : regionOrId.id; await this.delete("regions", undefined, { id }).toPromise(); } + /** + * Gets all Coordinates from Traffic Ops. + * + * @returns The requested Coordinates. + */ public async getCoordinates(): Promise>; + /** + * Gets a single Coordinate from Traffic Ops. + * + * @param nameOrID The name (string) or ID (number) of the single Coordinate + * to be fetched. + * @returns The requested Coordinate. + */ public async getCoordinates(nameOrID: string | number): Promise; - /** - * Gets an array of coordinates from Traffic Ops. + * Gets a Coordinate or Coordinates from Traffic Ops. * * @param nameOrID If given, returns only the Coordinate with the given name * (string) or ID (number). - * @returns An Array of Coordinate objects - or a single Coordinate object if 'nameOrID' - * was given. + * @returns The requested Coordinate or Coordinates. */ public async getCoordinates(nameOrID?: string | number): Promise | ResponseCoordinate> { const path = "coordinates"; @@ -378,30 +408,30 @@ export class CacheGroupService extends APIService { } /** - * Replaces the current definition of a coordinate with the one given. + * Replaces the current definition of a Coordinate with the one given. * - * @param coordinate The new coordinate. - * @returns The updated coordinate. + * @param coordinate The new Coordinate. + * @returns The updated Coordinate. */ public async updateCoordinate(coordinate: ResponseCoordinate): Promise { return this.put("coordinates", coordinate, { id: coordinate.id }).toPromise(); } /** - * Creates a new coordinate. + * Creates a new Coordinate. * - * @param coordinate The coordinate to create. - * @returns The created coordinate. + * @param coordinate The Coordinate to create. + * @returns The created Coordinate. */ public async createCoordinate(coordinate: RequestCoordinate): Promise { return this.post("coordinates", coordinate).toPromise(); } /** - * Deletes an existing coordinate. + * Deletes an existing Coordinate. * - * @param coordinateOrId Id of the coordinate to delete. - * @returns The deleted coordinate. + * @param coordinateOrId The ID of the Coordinate to delete. + * @returns The deleted Coordinate. */ public async deleteCoordinate(coordinateOrId: number | ResponseCoordinate): Promise { const id = typeof(coordinateOrId) === "number" ? coordinateOrId : coordinateOrId.id; @@ -425,7 +455,7 @@ export class CacheGroupService extends APIService { /** * Gets ASNs from Traffic Ops. * - * @param id If given, returns only the asn with the given ID. + * @param id If given, returns only the ASN with the given ID. * @returns An Array of ASNs objects - or a single ASN object if `id` * was given. */ diff --git a/experimental/traffic-portal/src/app/api/coordinate.service.spec.ts b/experimental/traffic-portal/src/app/api/coordinate.service.spec.ts deleted file mode 100644 index b0811ddb85..0000000000 --- a/experimental/traffic-portal/src/app/api/coordinate.service.spec.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * @license Apache-2.0 - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { - HttpClientTestingModule, - HttpTestingController, -} from "@angular/common/http/testing"; -import { TestBed } from "@angular/core/testing"; - -import { CoordinateService } from "./coordinate.service"; - -describe("CoordinateService", () => { - let service: CoordinateService; - let httpTestingController: HttpTestingController; - const coordinate = { - id: 1, - lastUpdated: new Date(), - latitude: 1.0, - longitude: -1.0, - name: "test_coordinate", - }; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - providers: [CoordinateService], - }); - service = TestBed.inject(CoordinateService); - httpTestingController = TestBed.inject(HttpTestingController); - }); - - it("should be created", () => { - expect(service).toBeTruthy(); - }); - - it("gets multiple Coordinates", async () => { - const responseP = service.getCoordinates(); - const req = httpTestingController.expectOne( - `/api/${service.apiVersion}/coordinates` - ); - expect(req.request.method).toBe("GET"); - expect(req.request.params.keys().length).toBe(0); - req.flush({ response: [coordinate] }); - await expectAsync(responseP).toBeResolvedTo([coordinate]); - }); - - it("gets a single Coordinate by ID", async () => { - const responseP = service.getCoordinates(coordinate.id); - const req = httpTestingController.expectOne( - (r) => r.url === `/api/${service.apiVersion}/coordinates` - ); - expect(req.request.method).toBe("GET"); - expect(req.request.params.keys().length).toBe(1); - expect(req.request.params.get("id")).toBe(String(coordinate.id)); - req.flush({ response: [coordinate] }); - await expectAsync(responseP).toBeResolvedTo(coordinate); - }); - - it("gets a single Coordinate by name", async () => { - const responseP = service.getCoordinates(coordinate.name); - const req = httpTestingController.expectOne( - (r) => r.url === `/api/${service.apiVersion}/coordinates` - ); - expect(req.request.method).toBe("GET"); - expect(req.request.params.keys().length).toBe(1); - expect(req.request.params.get("name")).toBe(coordinate.name); - req.flush({ response: [coordinate] }); - await expectAsync(responseP).toBeResolvedTo(coordinate); - }); - - it("sends requests for multiple coordinates by ID", async () => { - const responseParams = service.getCoordinates(coordinate.id); - const req = httpTestingController.expectOne( - (r) => r.url === `/api/${service.apiVersion}/coordinates` - ); - expect(req.request.method).toBe("GET"); - expect(req.request.params.keys().length).toBe(1); - expect(req.request.params.get("id")).toBe(String(coordinate.id)); - const data = { - response: [ - { - id: 1, - lastUpdated: new Date(), - latitude: 1.0, - longitude: -1.0, - name: "test_coordinate1", - }, - { - id: 1, - lastUpdated: new Date(), - latitude: 1.0, - longitude: -1.0, - name: "test_coordinate2", - }, - ], - }; - req.flush(data); - await expectAsync(responseParams).toBeRejectedWithError( - `Traffic Ops responded with 2 Coordinates by identifier ${coordinate.id}` - ); - }); - - afterEach(() => { - httpTestingController.verify(); - }); -}); diff --git a/experimental/traffic-portal/src/app/api/coordinate.service.ts b/experimental/traffic-portal/src/app/api/coordinate.service.ts deleted file mode 100644 index 6d9d89ddf7..0000000000 --- a/experimental/traffic-portal/src/app/api/coordinate.service.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { HttpClient } from "@angular/common/http"; -import { Injectable } from "@angular/core"; -import type { ResponseCoordinate } from "trafficops-types"; - -import { APIService } from "./base-api.service"; - -/** - * CoordinateService exposes API functionality relating to Coordinates. - */ -@Injectable() -export class CoordinateService extends APIService { - /** - * Gets a specific Coordinate from Traffic Ops. - * - * @param idOrName Either the integral, unique identifier (number) or name - * (string) of the Coordinate to be returned. - * @returns The requested Coordinate. - */ - public async getCoordinates( - idOrName: number | string - ): Promise; - /** - * Gets Coordinates from Traffic Ops. - * - * @returns An Array of all Coordinates from Traffic Ops. - */ - public async getCoordinates(): Promise>; - - /** - * Gets one or all Coordinates from Traffic Ops. - * - * @param idOrName Optionally the integral, unique identifier (number) or - * name (string) of a single Coordinate to be returned. - * @returns The requested Coordinate(s). - */ - public async getCoordinates( - idOrName?: number | string - ): Promise> { - const path = "coordinates"; - if (idOrName !== undefined) { - let params; - switch (typeof idOrName) { - case "string": - params = { name: idOrName }; - break; - case "number": - params = { id: idOrName }; - } - const r = await this.get<[ResponseCoordinate]>( - path, - undefined, - params - ).toPromise(); - if (r.length !== 1) { - throw new Error( - `Traffic Ops responded with ${r.length} Coordinates by identifier ${idOrName}` - ); - } - return r[0]; - } - return this.get>(path).toPromise(); - } - - /** - * Injects the Angular HTTP client service into the parent constructor. - * - * @param http The Angular HTTP client service. - */ - constructor(http: HttpClient) { - super(http); - } -} diff --git a/experimental/traffic-portal/src/app/api/index.ts b/experimental/traffic-portal/src/app/api/index.ts index 7de4187ab3..19e41a0d6e 100644 --- a/experimental/traffic-portal/src/app/api/index.ts +++ b/experimental/traffic-portal/src/app/api/index.ts @@ -20,7 +20,6 @@ import { ChangeLogsService } from "src/app/api/change-logs.service"; import { CacheGroupService } from "./cache-group.service"; import { CDNService } from "./cdn.service"; -import { CoordinateService } from "./coordinate.service"; import { DeliveryServiceService } from "./delivery-service.service"; import { InvalidationJobService } from "./invalidation-job.service"; import { MiscAPIsService } from "./misc-apis.service"; @@ -45,7 +44,6 @@ export * from "./topology.service"; export * from "./type.service"; export * from "./user.service"; export * from "./origin.service"; -export * from "./coordinate.service"; /** * The API Module contains all logic used to access the Traffic Ops API. @@ -69,7 +67,6 @@ export * from "./coordinate.service"; TypeService, UserService, OriginService, - CoordinateService, ] }) export class APIModule { } diff --git a/experimental/traffic-portal/src/app/api/origin.service.ts b/experimental/traffic-portal/src/app/api/origin.service.ts index 50b74a9284..d38142253f 100644 --- a/experimental/traffic-portal/src/app/api/origin.service.ts +++ b/experimental/traffic-portal/src/app/api/origin.service.ts @@ -74,10 +74,10 @@ export class OriginService extends APIService { } /** - * Deletes an existing origin. + * Deletes an existing Origin. * - * @param originOrId Id of the origin to delete. - * @returns The deleted origin. + * @param originOrId The ID of the Origin to delete. + * @returns The deleted Origin. */ public async deleteOrigin( originOrId: number | RequestOriginResponse @@ -87,10 +87,10 @@ export class OriginService extends APIService { } /** - * Creates a new origin. + * Creates a new Origin. * - * @param origin The origin to create. - * @returns The created origin. + * @param origin The Origin to create. + * @returns The created Origin. */ public async createOrigin( origin: RequestOrigin @@ -99,10 +99,10 @@ export class OriginService extends APIService { } /** - * Replaces the current definition of an origin with the one given. + * Replaces the current definition of an Origin with the one given. * - * @param origin The new origin. - * @returns The updated origin. + * @param origin The new Origin. + * @returns The updated Origin. */ public async updateOrigin( origin: RequestOriginResponse diff --git a/experimental/traffic-portal/src/app/api/profile.service.ts b/experimental/traffic-portal/src/app/api/profile.service.ts index 623592a380..2ecf9eb0c3 100644 --- a/experimental/traffic-portal/src/app/api/profile.service.ts +++ b/experimental/traffic-portal/src/app/api/profile.service.ts @@ -132,21 +132,34 @@ export class ProfileService extends APIService { } /** - * Import profile + * Imports a Profile along with all its associated Parameters. * - * @param importJSON JSON object for import. - * @returns profile response for imported object. + * @param importJSON The specification of the Profile to be imported/created. + * @returns The created Profile. */ public async importProfile(importJSON: ProfileImport): Promise{ return this.post("profiles/import", importJSON).toPromise(); } - public async getParameters(id: number): Promise; + /** + * Retrieves all Parameters from Traffic Ops. + * + * @returns The requested Parameters. + */ public async getParameters(): Promise>; /** - * Retrieves Parameters from the API. + * Retrieves a single Parameter from Traffic Ops. + * + * @param id The integral, unique identifier of the specific Parameter to + * retrieve. + * @returns The requested Parameter(s). + */ + public async getParameters(id: number): Promise; + /** + * Retrieves a Parameter or Parameters from the API. * - * @param id Specify either the integral, unique identifier (number) of a specific Parameter to retrieve. + * @param id If given, only the Parameter with this integral, unique + * identifier will be returned. * @returns The requested Parameter(s). */ public async getParameters(id?: number): Promise | ResponseParameter> { @@ -163,10 +176,10 @@ export class ProfileService extends APIService { } /** - * Deletes an existing parameter. + * Deletes an existing Parameter. * - * @param typeOrId Id of the parameter to delete. - * @returns The deleted parameter. + * @param typeOrId The ID of the Parameter to delete. + * @returns The deleted Parameter. */ public async deleteParameter(typeOrId: number | ResponseParameter): Promise { const id = typeof(typeOrId) === "number" ? typeOrId : typeOrId.id; @@ -174,20 +187,20 @@ export class ProfileService extends APIService { } /** - * Creates a new parameter. + * Creates a new Parameter. * - * @param parameter The parameter to create. - * @returns The created parameter. + * @param parameter The Parameter to create. + * @returns The created Parameter. */ public async createParameter(parameter: RequestParameter): Promise { return this.post("parameters", parameter).toPromise(); } /** - * Replaces the current definition of a parameter with the one given. + * Replaces the current definition of a Parameter with the one given. * - * @param parameter The new parameter. - * @returns The updated parameter. + * @param parameter The new Parameter. + * @returns The updated Parameter. */ public async updateParameter(parameter: ResponseParameter): Promise { const path = `parameters/${parameter.id}`; diff --git a/experimental/traffic-portal/src/app/api/server.service.ts b/experimental/traffic-portal/src/app/api/server.service.ts index be5c66a069..4061c95074 100644 --- a/experimental/traffic-portal/src/app/api/server.service.ts +++ b/experimental/traffic-portal/src/app/api/server.service.ts @@ -43,6 +43,12 @@ export class ServerService extends APIService { super(http); } + /** + * Retrieves servers from the API. + * + * @returns The requested servers. + */ + public async getServers(): Promise>; /** * Retrieves a single server from the API. * @@ -55,12 +61,6 @@ export class ServerService extends APIService { * error. */ public async getServers(idOrName: number | string): Promise; - /** - * Retrieves servers from the API. - * - * @returns The requested servers. - */ - public async getServers(): Promise>; /** * Retrieves servers from the API. * @@ -129,13 +129,26 @@ export class ServerService extends APIService { return this.put(`servers/${id}`, body).toPromise(); } + /** + * Fetches server "check" stats from Traffic Ops. + * + * @returns All Serverchecks Traffic Ops has. + */ public async getServerChecks(): Promise; + /** + * Fetches a server's "check" stats from Traffic Ops. + * + * @param id The ID of the server whose "checks" will be returned. + * @returns The Servercheck for the server identified by `id`. + */ public async getServerChecks(id: number): Promise; /** * Fetches server "check" stats from Traffic Ops. * - * @param id If given, will return only the checks for the server with that ID. - * @todo Ideally this filter would be implemented server-side; the data set gets huge. + * @param id If given, will return only the checks for the server with that + * ID. + * @todo Ideally this filter would be implemented server-side; the data set + * gets huge. * @returns Serverchecks - or a single Servercheck if ID was given. */ public async getServerChecks(id?: number): Promise { diff --git a/experimental/traffic-portal/src/app/api/testing/cache-group.service.ts b/experimental/traffic-portal/src/app/api/testing/cache-group.service.ts index fbe62ee514..d5627dc398 100644 --- a/experimental/traffic-portal/src/app/api/testing/cache-group.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/cache-group.service.ts @@ -194,15 +194,31 @@ export class CacheGroupService { constructor(private readonly servers: ServerService) {} - public async getCacheGroups(idOrName: number | string): Promise; + /** + * Gets all Cache Groups. + * + * @returns All stored Cache Groups. + */ public async getCacheGroups(): Promise>; /** - * Gets one or all CDNs from Traffic Ops + * Gets a single Cache Group. + * + * @param idOrName Either the name or integral, unique identifier of the + * single Cache Group to be returned. + * @returns The requested Cache Group. + * @throws {Error} In the event that `idOrName` is passed but does not match + * any CacheGroup. + */ + public async getCacheGroups(idOrName: number | string): Promise; + /** + * Gets one or all Cache Groups. * - * @param idOrName Optionally either the name or integral, unique identifier of a single Cache Group to be returned. - * @returns Either an Array of CacheGroup objects, or a single CacheGroup, depending on whether - * `idOrName` was passed. - * @throws {Error} In the event that `idOrName` is passed but does not match any CacheGroup. + * @param idOrName Optionally either the name or integral, unique identifier + * of a single Cache Group to be returned. + * @returns Either all stored Cache Groups, or a single Cache Group, + * depending on whether `idOrName` was passed. + * @throws {Error} In the event that `idOrName` is passed but does not match + * any CacheGroup. */ public async getCacheGroups(idOrName?: number | string): Promise | ResponseCacheGroup> { if (idOrName !== undefined) { @@ -456,16 +472,27 @@ export class CacheGroupService { serverNames, }; } + + /** + * Gets all Divisions. + * + * @returns The requested Divisions. + */ public async getDivisions(): Promise>; + /** + * Gets a single Division. + * + * @param nameOrID Either the name (string) or ID (number) of the single + * Division to be returned. + * @returns The requested Division. + */ public async getDivisions(nameOrID: string | number): Promise; - /** - * Gets an array of divisions from Traffic Ops. + * Gets a Division or Divisions. * - * @param nameOrID If given, returns only the ResponseDivision with the given name + * @param nameOrID If given, returns only the Division with the given name * (string) or ID (number). - * @returns An Array of ResponseDivision objects - or a single ResponseDivision object if 'nameOrID' - * was given. + * @returns The requested Division or Divisions. */ public async getDivisions(nameOrID?: string | number): Promise | ResponseDivision> { if(nameOrID) { @@ -486,10 +513,10 @@ export class CacheGroupService { } /** - * Replaces the current definition of a division with the one given. + * Replaces the current definition of a Division with the one given. * - * @param division The new division. - * @returns The updated division. + * @param division The new Division. + * @returns The updated Division. */ public async updateDivision(division: ResponseDivision): Promise { const id = this.divisions.findIndex(d => d.id === division.id); @@ -501,10 +528,10 @@ export class CacheGroupService { } /** - * Creates a new division. + * Creates a new Division. * - * @param division The division to create. - * @returns The created division. + * @param division The Division to create. + * @returns The created Division. */ public async createDivision(division: RequestDivision): Promise { const div = { @@ -517,10 +544,10 @@ export class CacheGroupService { } /** - * Deletes an existing division. + * Deletes an existing Division. * - * @param id Id of the division to delete. - * @returns The deleted division. + * @param id Id of the Division to delete. + * @returns The deleted Division. */ public async deleteDivision(id: number): Promise { const index = this.divisions.findIndex(d => d.id === id); @@ -530,16 +557,26 @@ export class CacheGroupService { return this.divisions.splice(index, 1)[0]; } + /** + * Gets all Regions. + * + * @returns The requested Regions. + */ public async getRegions(): Promise>; + /** + * Gets a single Region. + * + * @param nameOrID The name (string) or ID (number) of the single Region to + * be returned. + * @returns The requested Region. + */ public async getRegions(nameOrID: string | number): Promise; - /** - * Gets an array of regions from Traffic Ops. + * Gets a Region or Regions. * - * @param nameOrID If given, returns only the ResponseRegion with the given name + * @param nameOrID If given, returns only the Region with the given name * (string) or ID (number). - * @returns An Array of ResponseRegion objects - or a single ResponseRegion object if 'nameOrID' - * was given. + * @returns The requested Region or Regions. */ public async getRegions(nameOrID?: string | number): Promise | ResponseRegion> { if(nameOrID) { @@ -560,10 +597,10 @@ export class CacheGroupService { } /** - * Replaces the current definition of a region with the one given. + * Replaces the current definition of a Region with the one given. * - * @param region The new region. - * @returns The updated region. + * @param region The new Region. + * @returns The updated Region. */ public async updateRegion(region: ResponseRegion): Promise { const id = this.regions.findIndex(d => d.id === region.id); @@ -575,10 +612,10 @@ export class CacheGroupService { } /** - * Creates a new region. + * Creates a new Region. * - * @param region The region to create. - * @returns The created region. + * @param region The Region to create. + * @returns The created Region. */ public async createRegion(region: RequestRegion): Promise { const reg = { @@ -592,10 +629,10 @@ export class CacheGroupService { } /** - * Deletes an existing region. + * Deletes an existing Region. * - * @param id Id of the region to delete. - * @returns The deleted region. + * @param id Id of the Region to delete. + * @returns The deleted Region. */ public async deleteRegion(id: number | ResponseRegion): Promise { const index = this.regions.findIndex(d => d.id === id); @@ -604,16 +641,27 @@ export class CacheGroupService { } return this.regions.splice(index, 1)[0]; } + + /** + * Gets all Coordinates from Traffic Ops. + * + * @returns The requested Coordinates. + */ public async getCoordinates(): Promise>; + /** + * Gets a single Coordinate from Traffic Ops. + * + * @param nameOrID The name (string) or ID (number) of the single Coordinate + * to be fetched. + * @returns The requested Coordinate. + */ public async getCoordinates(nameOrID: string | number): Promise; - /** - * Gets an array of coordinates from Traffic Ops. + * Gets a Coordinate or Coordinates from Traffic Ops. * - * @param nameOrID If given, returns only the ResponseCoordinate with the given name + * @param nameOrID If given, returns only the Coordinate with the given name * (string) or ID (number). - * @returns An Array of ResponseCoordinate objects - or a single ResponseCoordinate object if 'nameOrID' - * was given. + * @returns The requested Coordinate or Coordinates. */ public async getCoordinates(nameOrID?: string | number): Promise | ResponseCoordinate> { if(nameOrID) { @@ -634,10 +682,10 @@ export class CacheGroupService { } /** - * Replaces the current definition of a coordinate with the one given. + * Replaces the current definition of a Coordinate with the one given. * - * @param coordinate The new coordinate. - * @returns The updated coordinate. + * @param coordinate The new Coordinate. + * @returns The updated Coordinate. */ public async updateCoordinate(coordinate: ResponseCoordinate): Promise { const id = this.coordinates.findIndex(c => c.id === coordinate.id); @@ -649,10 +697,10 @@ export class CacheGroupService { } /** - * Creates a new coordinate. + * Creates a new Coordinate. * - * @param coordinate The coordinate to create. - * @returns The created coordinate. + * @param coordinate The Coordinate to create. + * @returns The created Coordinate. */ public async createCoordinate(coordinate: RequestCoordinate): Promise { const crd = { @@ -665,10 +713,10 @@ export class CacheGroupService { } /** - * Deletes an existing coordinate. + * Deletes an existing Coordinate. * - * @param id Id of the coordinate to delete. - * @returns The deleted coordinate. + * @param id Id of the Coordinate to delete. + * @returns The deleted Coordinate. */ public async deleteCoordinate(id: number): Promise { const index = this.coordinates.findIndex(c => c.id === id); @@ -678,14 +726,25 @@ export class CacheGroupService { return this.coordinates.splice(index, 1)[0]; } + /** + * Gets all ASNs. + * + * @returns All stored ASNs. + */ public async getASNs(): Promise>; + /** + * Gets a single ASN. + * + * @param id The ID of the ASN to fetch. + * @returns The ASN with the given ID. + */ public async getASNs(id: number): Promise; /** - * Gets an array of ASNs from Traffic Ops. + * Gets all ASNs. * - * @param id If given, returns only the asn with the given id (number). - * @returns An Array of ASNs objects - or a single ASN object if 'id' + * @param id If given, returns only the ASN with the given ID. + * @returns An Array of ASNs objects - or a single ASN object if `id` * was given. */ public async getASNs(id?: number): Promise | ResponseASN> { @@ -733,16 +792,15 @@ export class CacheGroupService { } /** - * Deletes an existing asn. + * Deletes an existing ASN. * * @param asn The ASN to be deleted or ID of the ASN to delete.. - * @returns The deleted asn. */ - public async deleteASN(asn: ResponseASN | number): Promise { + public async deleteASN(asn: ResponseASN | number): Promise { const index = this.asns.findIndex(a => a.asn === asn); if (index === -1) { throw new Error(`no such asn: ${asn}`); } - return this.asns.splice(index, 1)[0]; + this.asns.splice(index, 1); } } diff --git a/experimental/traffic-portal/src/app/api/testing/cdn.service.ts b/experimental/traffic-portal/src/app/api/testing/cdn.service.ts index a93c5cc947..66c0eb3534 100644 --- a/experimental/traffic-portal/src/app/api/testing/cdn.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/cdn.service.ts @@ -39,15 +39,26 @@ export class CDNService { } ]; - public async getCDNs(id: number): Promise; + /** + * Gets all CDNs. + * + * @returns All CDNs. + */ public async getCDNs(): Promise>; /** - * Gets one or all CDNs from Traffic Ops + * Gets a specific CDN. + * + * @param id The integral, unique identifier of the single CDN to be + * returned. + * @returns The requested CDN. + */ + public async getCDNs(id: number): Promise; + /** + * Gets one or all CDNs. * - * @param id The integral, unique identifier of a single CDN to be returned - * @returns Either a Map of CDN names to full CDN objects, or a single CDN, depending on whether `id` was + * @param id The integral, unique identifier of a single CDN to be returned. + * @returns Either all CDNs or a single CDN, depending on whether `id` was * passed. - * (In the event that `id` is passed but does not match any CDN, `null` will be emitted) */ public async getCDNs(id?: number): Promise | ResponseCDN> { if (id !== undefined) { diff --git a/experimental/traffic-portal/src/app/api/testing/coordinate.service.ts b/experimental/traffic-portal/src/app/api/testing/coordinate.service.ts deleted file mode 100644 index a4a0f49759..0000000000 --- a/experimental/traffic-portal/src/app/api/testing/coordinate.service.ts +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Injectable } from "@angular/core"; -import type { ResponseCoordinate } from "trafficops-types"; - -/** - * CoordinateService exposes API functionality relating to Coordinates. - */ -@Injectable() -export class CoordinateService { - private readonly coordinates: Array = [ - { - id: 1, - lastUpdated: new Date(), - latitude: 1.0, - longitude: -1.0, - name: "test_coordinate", - }, - ]; - - public async getCoordinates(): Promise>; - public async getCoordinates( - nameOrID: string | number - ): Promise; - - /** - * Gets one or all Coordinates from Traffic Ops. - * - * @param nameOrID If given, returns only the ResponseCoordinate with the given name - * (string) or ID (number). - * @returns An Array of ResponseCoordinate objects - or a single ResponseCoordinate object if 'nameOrID' - * was given. - */ - public async getCoordinates( - nameOrID?: string | number - ): Promise | ResponseCoordinate> { - if (nameOrID) { - let coordinate; - switch (typeof nameOrID) { - case "string": - coordinate = this.coordinates.find( - (d) => d.name === nameOrID - ); - break; - case "number": - coordinate = this.coordinates.find( - (d) => d.id === nameOrID - ); - } - if (!coordinate) { - throw new Error(`no such Coordinate: ${nameOrID}`); - } - return coordinate; - } - return this.coordinates; - } -} diff --git a/experimental/traffic-portal/src/app/api/testing/delivery-service.service.ts b/experimental/traffic-portal/src/app/api/testing/delivery-service.service.ts index cee43c5219..5be6ccac37 100644 --- a/experimental/traffic-portal/src/app/api/testing/delivery-service.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/delivery-service.service.ts @@ -196,14 +196,26 @@ export class DeliveryServiceService { return []; } - public async getDeliveryServices(id: string | number): Promise; + /** + * Gets all Delivery Services. + * + * @returns All Delivery Services (visible to the user's Tenant). + */ public async getDeliveryServices(): Promise>; /** - * Gets a list of all visible Delivery Services + * Gets a specific Delivery Service. * - * @param id A unique identifier for a Delivery Service - either a numeric id or an "xml_id" - * @throws TypeError if ``id`` is not a proper type - * @returns An array of `DeliveryService` objects. + * @param id A unique identifier for the desired Delivery Service - either + * its numeric id or its "xml_id". + * @returns The requested Delivery Service. + */ + public async getDeliveryServices(id: string | number): Promise; + /** + * Gets one or all Delivery Services. + * + * @param id If given, only the Delivery Service with this ID (number) or + * "xml_id" (string) will be returned. + * @returns The requested Delivery Service(s). */ public async getDeliveryServices(id?: string | number): Promise { if (id !== undefined) { @@ -374,29 +386,84 @@ export class DeliveryServiceService { }; } - public async getDSKBPS(d: string, s: Date, e: Date, i: string, u: boolean, dataOnly: true): Promise>; - public async getDSKBPS(d: string, start: Date, end: Date, interval: string, useMids: boolean, dataOnly?: false): Promise; /** - * Retrieves Delivery Service throughput statistics for a given time period, averaged over a given - * interval. + * Retrieves Delivery Service throughput statistics for a given time period, + * averaged over a given interval. + * + * @param d The Delivery Service for which stats will be returned or just + * its "xml_id". + * @param start A date/time from which to start data collection. + * @param end A date/time at which to end data collection. + * @param interval A unit-suffixed interval over which data will be + * "binned". + * @param useMids If true, the returned data will be for mid-tier caching + * servers rather than edge-tier. Implementation detail: in the testing + * service, this has absolutely no bearing on what is returned. + * @param dataOnly If given and false (which is also the default value) + * explicitly specifies that the entire data response should be returned, + * and not just the data series itself. + * @returns A response with some randomly generated data. + */ + public async getDSKBPS( + d: ResponseDeliveryService | string, + start: Date, + end: Date, + interval: string, + useMids: boolean, + dataOnly?: false + ): Promise; + /** + * Retrieves Delivery Service throughput statistics for a given time period, + * averaged over a given interval. + * + * @param d The Delivery Service for which stats will be returned or just + * its "xml_id". + * @param start A date/time from which to start data collection. + * @param end A date/time at which to end data collection. + * @param interval A unit-suffixed interval over which data will be + * "binned". + * @param useMids If true, the returned data will be for mid-tier caching + * servers rather than edge-tier. Implementation detail: in the testing + * service, this has absolutely no bearing on what is returned. + * @param dataOnly Only returns the data series, not any supplementing meta + * info found in the API response. + * @returns An Array of datapoint Arrays (length 2 containing a date string + * and data value). + */ + public async getDSKBPS( + d: ResponseDeliveryService | string, + start: Date, + end: Date, + interval: string, + useMids: boolean, + dataOnly: true + ): Promise>; + /** + * Retrieves Delivery Service throughput statistics for a given time period, + * averaged over a given interval. * - * @param d The `xml_id` of a Delivery Service - * @param start A date/time from which to start data collection - * @param end A date/time at which to end data collection - * @param interval A unit-suffixed interval over which data will be "binned" - * @param _ Unuzed - kept for compatibility with the "concrete" service. - * @param dataOnly Only returns the data series, not any supplementing meta info found in the API response - * @returns An Array of datapoint Arrays (length 2 containing a date string and data value) + * @param d The Delivery Service for which stats will be returned or just + * its "xml_id". + * @param start A date/time from which to start data collection. + * @param end A date/time at which to end data collection. + * @param interval A unit-suffixed interval over which data will be + * "binned". + * @param _ Unused - kept for compatibility with the "concrete" service. + * @param dataOnly If given and `true`, only returns the data series, not + * any supplementing meta info found in the API response. + * @returns The response - either with or without supplementary meta info as + * decided by `dataOnly`. */ public async getDSKBPS( - d: string, + d: ResponseDeliveryService | string, start: Date, end: Date, interval: string, _: boolean, dataOnly?: boolean ): Promise | DataResponse> { - const ds = this.deliveryServices.filter(service=>service.xmlId === d)[0]; + const xmlID = typeof(d) === "string" ? d : d.xmlId; + const ds = this.deliveryServices.find(service=>service.xmlId === xmlID); if (!ds) { throw new Error(`no such Delivery Service: ${d}`); } @@ -428,21 +495,27 @@ export class DeliveryServiceService { } /** - * Gets total TPS data for a Delivery Service. To get TPS data broken down by HTTP status, use {@link getAllDSTPSData}. + * Gets total TPS data for a Delivery Service. To get TPS data broken down + * by HTTP status, use {@link getAllDSTPSData}. * - * @param d The name (xmlid) of the Delivery Service for which TPS stats will be fetched - * @param start The desired start date/time of the data range (must not have nonzero milliseconds!) - * @param end The desired end date/time of the data range (must not have nonzero milliseconds!) - * @param interval A string that describes the interval across which to 'bucket' data e.g. '60s' + * @param d The Delivery Service for which TPS stats will be fetched, or + * just its "xml_id". + * @param start The desired start date/time of the data range (must not have + * nonzero milliseconds!). + * @param end The desired end date/time of the data range (must not have + * nonzero milliseconds!). + * @param interval A string that describes the interval across which to + * 'bucket' data e.g. '60s'. * @returns The requested DataResponse. */ public async getDSTPS( - d: string, + d: ResponseDeliveryService | string, start: Date, end: Date, interval: string, ): Promise { - const ds = this.deliveryServices.filter(service=>service.xmlId === d)[0]; + const xmlID = typeof(d) === "string" ? d : d.xmlId; + const ds = this.deliveryServices.find(service=>service.xmlId === xmlID); if (!ds) { throw new Error(`no such Delivery Service: ${d}`); } @@ -471,21 +544,27 @@ export class DeliveryServiceService { } /** - * Gets total TPS data for a Delivery Service, as well as TPS data by HTTP response type. + * Gets total TPS data for a Delivery Service, as well as TPS data by HTTP + * response type. * - * @param d The name (xmlid) of the Delivery Service for which TPS stats will be fetched - * @param start The desired start date/time of the data range (must not have nonzero milliseconds!) - * @param end The desired end date/time of the data range (must not have nonzero milliseconds!) - * @param interval A string that describes the interval across which to 'bucket' data e.g. '60s' + * @param d The Delivery Service for which TPS stats will be fetched, or + * just its "xml_id". + * @param start The desired start date/time of the data range (must not have + * nonzero milliseconds!). + * @param end The desired end date/time of the data range (must not have + * nonzero milliseconds!). + * @param interval A string that describes the interval across which to + * 'bucket' data e.g. '60s'. * @returns The requested TPSData. */ public async getAllDSTPSData( - d: string, + d: ResponseDeliveryService | string, start: Date, end: Date, interval: string, ): Promise { - const ds = this.deliveryServices.filter(service=>service.xmlId === d)[0]; + const xmlID = typeof(d) === "string" ? d : d.xmlId; + const ds = this.deliveryServices.filter(service=>service.xmlId === xmlID); if (!ds) { throw new Error(`no such Delivery Service: ${d}`); } @@ -548,7 +627,7 @@ export class DeliveryServiceService { /** * Gets a Delivery Service's SSL Keys * - * @param ds The delivery service xmlid or object + * @param ds The Delivery Service or just its "xml_id". * @returns The DS ssl keys */ public async getSSLKeys(ds: string | ResponseDeliveryService): Promise { diff --git a/experimental/traffic-portal/src/app/api/testing/index.ts b/experimental/traffic-portal/src/app/api/testing/index.ts index f71fd42819..d11c8b9680 100644 --- a/experimental/traffic-portal/src/app/api/testing/index.ts +++ b/experimental/traffic-portal/src/app/api/testing/index.ts @@ -19,7 +19,6 @@ import { CacheGroupService, CDNService, ChangeLogsService, - CoordinateService, DeliveryServiceService, InvalidationJobService, MiscAPIsService, @@ -35,7 +34,6 @@ import { import { CacheGroupService as TestingCacheGroupService } from "./cache-group.service"; import { CDNService as TestingCDNService } from "./cdn.service"; import { ChangeLogsService as TestingChangeLogsService} from "./change-logs.service"; -import { CoordinateService as TestingCoordinateService } from "./coordinate.service"; import { DeliveryServiceService as TestingDeliveryServiceService } from "./delivery-service.service"; import { InvalidationJobService as TestingInvalidationJobService } from "./invalidation-job.service"; import { MiscAPIsService as TestingMiscAPIsService } from "./misc-apis.service"; @@ -60,7 +58,6 @@ import { UserService as TestingUserService } from "./user.service"; {provide: CacheGroupService, useClass: TestingCacheGroupService}, {provide: ChangeLogsService, useClass: TestingChangeLogsService}, {provide: CDNService, useClass: TestingCDNService}, - {provide: CoordinateService, useClass: TestingCoordinateService}, {provide: DeliveryServiceService, useClass: TestingDeliveryServiceService}, {provide: InvalidationJobService, useClass: TestingInvalidationJobService}, {provide: MiscAPIsService, useClass: TestingMiscAPIsService}, diff --git a/experimental/traffic-portal/src/app/api/testing/origin.service.ts b/experimental/traffic-portal/src/app/api/testing/origin.service.ts index e85ec3f256..3a9e7e44a7 100644 --- a/experimental/traffic-portal/src/app/api/testing/origin.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/origin.service.ts @@ -16,14 +16,13 @@ import type { RequestOrigin, RequestOriginResponse } from "trafficops-types"; import { CacheGroupService, - CoordinateService, DeliveryServiceService, ProfileService, UserService, } from ".."; /** - * CoordinateService exposes API functionality relating to Coordinates. + * OriginService exposes API functionality relating to Origins. */ @Injectable() export class OriginService { @@ -53,24 +52,31 @@ export class OriginService { constructor( private readonly userService: UserService, - private readonly coordinateService: CoordinateService, private readonly cacheGroupService: CacheGroupService, private readonly profileService: ProfileService, private readonly dsService: DeliveryServiceService ) {} + /** + * Gets a specific Origin. + * + * @param nameOrID Either the integral, unique identifier (number) or name + * (string) of the Origin to be returned. + * @returns The requested Origin. + */ + public async getOrigins(nameOrID: number | string): Promise; + /** + * Gets all Origins. + * + * @returns All stored Origins. + */ public async getOrigins(): Promise>; - public async getOrigins( - nameOrID: string | number - ): Promise; - /** - * Gets one or all Coordinates from Traffic Ops. + * Gets one or all Origins. * - * @param nameOrID If given, returns only the ResponseCoordinate with the given name - * (string) or ID (number). - * @returns An Array of ResponseCoordinate objects - or a single ResponseCoordinate object if 'nameOrID' - * was given. + * @param nameOrID Optionally the integral, unique identifier (number) or + * name (string) of a single Origin to be returned. + * @returns The requested Origin(s). */ public async getOrigins( nameOrID?: string | number @@ -128,7 +134,7 @@ export class OriginService { } let coordinate = null; if (!!origin?.coordinateId) { - coordinate = await this.coordinateService.getCoordinates( + coordinate = await this.cacheGroupService.getCoordinates( origin.coordinateId ); } diff --git a/experimental/traffic-portal/src/app/api/testing/physical-location.service.ts b/experimental/traffic-portal/src/app/api/testing/physical-location.service.ts index 6fe4eafa4f..47f68e60b5 100644 --- a/experimental/traffic-portal/src/app/api/testing/physical-location.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/physical-location.service.ts @@ -37,16 +37,26 @@ export class PhysicalLocationService { zip: "0000" }]; + /** + * Gets all Physical Locations. + * + * @returns All stored Physical Locations. + */ public async getPhysicalLocations(): Promise>; + /** + * Gets a specific Physical Location. + * + * @param nameOrID The name (string) or ID (number) of the Physical Location + * to be returned. + * @returns The requested Physical Location. + */ public async getPhysicalLocations(nameOrID: string | number): Promise; - /** - * Gets one or all of PhysicalLocations from Traffic Ops. + * Gets one or all Physical Location(s). * - * @param nameOrID If given, returns only the ResponsePhysicalLocation with the given name - * (string) or ID (number). - * @returns An Array of ResponsePhysicalLocation objects - or a single ResponsePhysicalLocation object if 'nameOrID' - * was given. + * @param nameOrID If given, returns only the PhysicalLocation with the + * given name (string) or ID (number). + * @returns The requested Physical Location(s). */ public async getPhysicalLocations(nameOrID?: string | number): Promise | ResponsePhysicalLocation> { if(nameOrID) { diff --git a/experimental/traffic-portal/src/app/api/testing/profile.service.ts b/experimental/traffic-portal/src/app/api/testing/profile.service.ts index 686273d3ff..f26916f228 100644 --- a/experimental/traffic-portal/src/app/api/testing/profile.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/profile.service.ts @@ -144,12 +144,25 @@ export class ProfileService { } ]; - public async getProfiles(idOrName: number | string): Promise; + /** + * Retrieves all Profiles. + * + * @returns The requested Profiles. + */ public async getProfiles(): Promise>; /** - * Retrieves Profiles from the API. + * Retrieves a specific Profile from the API. + * + * @param idOrName Specify either the integral, unique identifier (number) + * of a specific Profile to retrieve, or its name (string). + * @returns The requested Profile. + */ + public async getProfiles(idOrName: number | string): Promise; + /** + * Retrieves one or allProfiles from the API. * - * @param idOrName Specify either the integral, unique identifier (number) of a specific Profile to retrieve, or its name (string). + * @param idOrName If given, only the Profile with this integral, unique + * identifier (number) or name (string) will be returned. * @returns The requested Profile(s). */ public async getProfiles(idOrName?: number | string): Promise | ResponseProfile> { @@ -183,10 +196,10 @@ export class ProfileService { } /** - * Creates a new profile. + * Creates a new Profile. * - * @param profile The profile to create. - * @returns The created profile. + * @param profile The Profile to create. + * @returns The created Profile. */ public async createProfile(profile: RequestProfile): Promise { const t = { @@ -200,9 +213,9 @@ export class ProfileService { } /** - * Updates an existing profile. + * Updates an existing Profile. * - * @param profile the profile to update. + * @param profile the Profile to update. * @returns The success message. */ public async updateProfile(profile: ResponseProfile): Promise { @@ -230,10 +243,10 @@ export class ProfileService { } /** - * import profile from json or text file + * Imports a Profile along with all its associated Parameters. * - * @param profile imported date for profile creation. - * @returns The created profile which is profileImportResponse with id added. + * @param profile The specification of the Profile to be imported/created. + * @returns The created Profile. */ public async importProfile(profile: ProfileImport): Promise { const t = { @@ -256,13 +269,26 @@ export class ProfileService { } ]; - public async getParameters(id: number): Promise; + /** + * Gets all Parameters. + * + * @returns The requested Parameters. + */ public async getParameters(): Promise>; /** - * Gets one or all Parameters from Traffic Ops + * Gets a specific Parameter. + * + * @param id The integral, unique identifier of the specific Parameter to be + * returned. + * @returns The requested parameter. + */ + public async getParameters(id: number): Promise; + /** + * Gets one or all Parameters. * - * @param id The integral, unique identifier (number) of a single parameter to be returned. - * @returns The requested parameter(s). + * @param id If given, only the Parameter with this unique, integral + * identifier will be returned. + * @returns The requested Parameter(s). */ public async getParameters(id?: number): Promise> { if (id !== undefined) { @@ -290,10 +316,10 @@ export class ProfileService { } /** - * Creates a new parameter. + * Creates a new Parameter. * - * @param parameter The parameter to create. - * @returns The created parameter. + * @param parameter The Parameter to create. + * @returns The created Parameter. */ public async createParameter(parameter: RequestParameter): Promise { const t = { @@ -327,8 +353,9 @@ export class ProfileService { /** * Retrieves Profiles associated with a Parameter from the API. * - * @param parameter Either a {@link ResponseParameter} or an integral, unique identifier of a Parameter, for which the - * Profiles are to be retrieved. + * @param parameter Either a {@link ResponseParameter} or an integral, + * unique identifier of a Parameter, for which the Profiles are to be + * retrieved. * @returns The requested Profile(s). */ public async getProfilesByParam(parameter: number| ResponseParameter): Promise> { diff --git a/experimental/traffic-portal/src/app/api/testing/server.service.ts b/experimental/traffic-portal/src/app/api/testing/server.service.ts index 38d80d3963..7227ec1e21 100644 --- a/experimental/traffic-portal/src/app/api/testing/server.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/server.service.ts @@ -111,12 +111,25 @@ export class ServerService { private readonly profileService: ProfileService ){} - public async getServers(idOrName: number | string): Promise; + /** + * Retrieves all servers. + * + * @returns The requested servers. + */ public async getServers(): Promise>; /** - * Retrieves servers from the API. + * Retrieves a specific server. * - * @param idOrName Specify either the integral, unique identifier (number) of a specific Server to retrieve, or its hostname (string). + * @param idOrName Either the (short) hostname (string) of the server to be + * returned, or its ID (number). + * @returns The requested server. + */ + public async getServers(idOrName: number | string): Promise; + /** + * Retrieves one or all servers. + * + * @param idOrName Specify either the integral, unique identifier (number) + * of a specific Server to retrieve, or its hostname (string). * @returns The requested server(s). */ public async getServers(idOrName?: number | string): Promise | ResponseServer> { @@ -216,13 +229,24 @@ export class ServerService { return this.servers[index]; } + /** + * Fetches server "check" stats. + * + * @returns All Serverchecks Traffic Ops has. + */ public async getServerChecks(): Promise; + /** + * Fetches a server's "check" stats. + * + * @param id The ID of the server whose "checks" will be returned. + * @returns The Servercheck for the server identified by `id`. + */ public async getServerChecks(id: number): Promise; /** - * Fetches server "check" stats from Traffic Ops. + * Fetches server "check" stats. * - * @param id If given, will return only the checks for the server with that ID. - * @todo Ideally this filter would be implemented server-side; the data set gets huge. + * @param id If given, will return only the checks for the server with that + * ID. * @returns Serverchecks - or a single Servercheck if ID was given. */ public async getServerChecks(id?: number): Promise { @@ -236,12 +260,25 @@ export class ServerService { return this.servers.map(serverCheck); } - public async getStatuses(idOrName: number | string): Promise; + /** + * Retrieves all Statuses. + * + * @returns The requested Statuses. + */ public async getStatuses(): Promise>; /** - * Retrieves Statuses from the API. + * Retrieves a specific Status. + * + * @param idOrName The ID (number) or Name (string) of a single Status to be + * retrieved. + * @returns The requested Status. + */ + public async getStatuses(idOrName: number | string): Promise; + /** + * Retrieves one or all Statuses. * - * @param idOrName An optional ID (number) or Name (string) used to fetch a single Status thereby identified. + * @param idOrName An optional ID (number) or Name (string) used to fetch a + * single Status thereby identified. * @returns The requested Status(es). */ public async getStatuses(idOrName?: number | string): Promise | ResponseStatus> { diff --git a/experimental/traffic-portal/src/app/api/testing/type.service.ts b/experimental/traffic-portal/src/app/api/testing/type.service.ts index 4d5531feaf..f946aff8a4 100644 --- a/experimental/traffic-portal/src/app/api/testing/type.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/type.service.ts @@ -145,12 +145,25 @@ export class TypeService { } ]; - public async getTypes(idOrName: number | string): Promise; + /** + * Gets all Types. + * + * @returns The requested Types. + */ public async getTypes(): Promise>; /** - * Gets one or all Types from Traffic Ops + * Gets a specific Type. + * + * @param idOrName Either the integral, unique identifier (number) or name + * (string) of the Type to be returned. + * @returns The requested Type. + */ + public async getTypes(idOrName: number | string): Promise; + /** + * Gets one or all Types. * - * @param idOrName Either the integral, unique identifier (number) or name (string) of a single Type to be returned. + * @param idOrName Optionally the integral, unique identifier (number) or + * name (string) of a single Type to be returned. * @returns The requested Type(s). */ public async getTypes(idOrName?: number | string): Promise> { diff --git a/experimental/traffic-portal/src/app/api/testing/user.service.ts b/experimental/traffic-portal/src/app/api/testing/user.service.ts index 607e9f3ebe..9b1673f6ed 100644 --- a/experimental/traffic-portal/src/app/api/testing/user.service.ts +++ b/experimental/traffic-portal/src/app/api/testing/user.service.ts @@ -219,13 +219,26 @@ export class UserService { return true; } + /** + * Gets a specific User. + * + * @param nameOrID The username (string) or ID (number) of the User to + * fetch. + * @returns The requested User. + */ public async getUsers(nameOrID: string | number): Promise; + /** + * Gets all stored Users. + * + * @returns All Users that are visible to the current user's Tenant. + */ public async getUsers(): Promise>; /** - * Gets an array of all users in Traffic Ops. + * Gets one or all Users. * - * @param nameOrID If given, returns only the User with the given username (string) or ID (number). - * @returns An Array of User objects - or a single User object if 'nameOrID' was given. + * @param nameOrID If given, returns only the User with the given username + * (string) or ID (number). + * @returns The requested User(s). */ public async getUsers(nameOrID?: string | number): Promise | ResponseUser> { if (nameOrID) { diff --git a/experimental/traffic-portal/src/app/api/type.service.ts b/experimental/traffic-portal/src/app/api/type.service.ts index d2539bf248..8d7b748532 100644 --- a/experimental/traffic-portal/src/app/api/type.service.ts +++ b/experimental/traffic-portal/src/app/api/type.service.ts @@ -32,6 +32,12 @@ type UseInTable = "cachegroup" | */ @Injectable() export class TypeService extends APIService { + /** + * Gets all Types from Traffic Ops. + * + * @returns The requested Types. + */ + public async getTypes(): Promise>; /** * Gets a specific Type from Traffic Ops. * @@ -40,14 +46,6 @@ export class TypeService extends APIService { * @returns The requested Type. */ public async getTypes(idOrName: number | string): Promise; - /** - * Gets Types from Traffic Ops. - * - * @param idOrName Either the integral, unique identifier (number) or name - * (string) of a single Type to be returned. - * @returns The requested Type(s). - */ - public async getTypes(): Promise>; /** * Gets one or all Types from Traffic Ops. * diff --git a/experimental/traffic-portal/src/app/core/deliveryservice/ds-card/ds-card.component.html b/experimental/traffic-portal/src/app/core/deliveryservice/ds-card/ds-card.component.html index c91862995b..ac55cf8e03 100644 --- a/experimental/traffic-portal/src/app/core/deliveryservice/ds-card/ds-card.component.html +++ b/experimental/traffic-portal/src/app/core/deliveryservice/ds-card/ds-card.component.html @@ -47,7 +47,7 @@

URLs

{{utilized}}% {{available}}% - {{maintenance}}% + {{maintenance}}%
diff --git a/experimental/traffic-portal/src/app/core/origins/detail/origin-detail.component.ts b/experimental/traffic-portal/src/app/core/origins/detail/origin-detail.component.ts index 33d199da1e..1d9c64046a 100644 --- a/experimental/traffic-portal/src/app/core/origins/detail/origin-detail.component.ts +++ b/experimental/traffic-portal/src/app/core/origins/detail/origin-detail.component.ts @@ -28,7 +28,6 @@ import type { import { CacheGroupService, - CoordinateService, DeliveryServiceService, OriginService, ProfileService, @@ -64,7 +63,6 @@ export class OriginDetailComponent implements OnInit { private readonly navSvc: NavigationService, private readonly log: LoggingService, private readonly userService: UserService, - private readonly coordinateService: CoordinateService, private readonly cacheGroupService: CacheGroupService, private readonly profileService: ProfileService, private readonly dsService: DeliveryServiceService @@ -76,7 +74,7 @@ export class OriginDetailComponent implements OnInit { public async ngOnInit(): Promise { this.tenants = await this.userService.getTenants(); this.cacheGroups = await this.cacheGroupService.getCacheGroups(); - this.coordinates = await this.coordinateService.getCoordinates(); + this.coordinates = await this.cacheGroupService.getCoordinates(); this.profiles = await this.profileService.getProfiles(); this.deliveryServices = await this.dsService.getDeliveryServices(); this.protocols = ["http", "https"]; diff --git a/experimental/traffic-portal/src/app/shared/tree-select/tree-select.component.html b/experimental/traffic-portal/src/app/shared/tree-select/tree-select.component.html index 69b11e2256..3e4fa50c5b 100644 --- a/experimental/traffic-portal/src/app/shared/tree-select/tree-select.component.html +++ b/experimental/traffic-portal/src/app/shared/tree-select/tree-select.component.html @@ -23,7 +23,7 @@ -
+
{{node.name}}
@@ -34,7 +34,7 @@ {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }} -
+
{{node.name}}