cloudfoundry/stratos

View on GitHub
src/frontend/packages/cf-autoscaler/src/store/app-autoscaler.actions.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { HttpRequest } from '@angular/common/http';

import { applicationEntityType } from '../../../cloud-foundry/src/cf-entity-types';
import { createEntityRelationPaginationKey } from '../../../cloud-foundry/src/entity-relations/entity-relations.types';
import { ApiRequestTypes } from '../../../store/src/reducers/api-request-reducer/request-helpers';
import { PaginatedAction, PaginationParam } from '../../../store/src/types/pagination.types';
import { EntityRequestAction } from '../../../store/src/types/request.types';
import { AppAutoscalerCredential, AppAutoscalerPolicyLocal, AppScalingTrigger } from './app-autoscaler.types';
import {
  appAutoscalerAppMetricEntityType,
  appAutoscalerCredentialEntityType,
  appAutoscalerHealthEntityType,
  appAutoscalerInfoEntityType,
  appAutoscalerPolicyEntityType,
  appAutoscalerPolicyTriggerEntityType,
  appAutoscalerScalingHistoryEntityType,
  AUTOSCALER_ENDPOINT_TYPE,
  autoscalerEntityFactory,
} from './autoscaler-entity-factory';

export const AppAutoscalerPolicyEvents = {
  GET_APP_AUTOSCALER_POLICY: '[App Autoscaler] Get autoscaler policy',
  GET_APP_AUTOSCALER_POLICY_SUCCESS: '[App Autoscaler] Get autoscaler policy success',
  GET_APP_AUTOSCALER_POLICY_FAILED: '[App Autoscaler] Get autoscaler policy failed'
};

export const AppAutoscalerPolicyTriggerEvents = {
  GET_APP_AUTOSCALER_POLICY: '[App Autoscaler] Get autoscaler policy trigger',
  GET_APP_AUTOSCALER_POLICY_SUCCESS: '[App Autoscaler] Get autoscaler policy trigger success',
  GET_APP_AUTOSCALER_POLICY_FAILED: '[App Autoscaler] Get autoscaler policy trigger failed'
};

export const AppAutoscalerScalingHistoryEvents = {
  GET_APP_AUTOSCALER_SCALING_HISTORY: '[App Autoscaler] Get autoscaler scaling history',
  GET_APP_AUTOSCALER_SCALING_HISTORY_SUCCESS: '[App Autoscaler] Get autoscaler scaling history success',
  GET_APP_AUTOSCALER_SCALING_HISTORY_FAILED: '[App Autoscaler] Get autoscaler scaling history failed'
};

export const AppAutoscalerMetricEvents = {
  GET_APP_AUTOSCALER_METRIC: '[App Autoscaler] Get autoscaler metric',
  GET_APP_AUTOSCALER_METRIC_SUCCESS: '[App Autoscaler] Get autoscaler metric success',
  GET_APP_AUTOSCALER_METRIC_FAILED: '[App Autoscaler] Get autoscaler metric failed'
};

export const APP_AUTOSCALER_POLICY = '[New App Autoscaler] Fetch policy';
export const APP_AUTOSCALER_POLICY_TRIGGER = '[New App Autoscaler] Fetch policy trigger';
export const CREATE_APP_AUTOSCALER_POLICY = '[New App Autoscaler] Create policy';
export const UPDATE_APP_AUTOSCALER_POLICY = '[New App Autoscaler] Update policy';
export const DETACH_APP_AUTOSCALER_POLICY = '[New App Autoscaler] Detach policy';
export const UPDATE_APP_AUTOSCALER_CREDENTIAL = '[New App Autoscaler] Update credential';
export const DELETE_APP_AUTOSCALER_CREDENTIAL = '[New App Autoscaler] Delete credential';
export const APP_AUTOSCALER_HEALTH = '[New App Autoscaler] Fetch Health';
export const APP_AUTOSCALER_SCALING_HISTORY = '[New App Autoscaler] Fetch Scaling History';
export const FETCH_APP_AUTOSCALER_METRIC = '[New App Autoscaler] Fetch Metric';
export const AUTOSCALER_INFO = '[Autoscaler] Fetch Info';

export const UPDATE_APP_AUTOSCALER_POLICY_STEP = '[Edit Autoscaler Policy] Step';

export class GetAppAutoscalerInfoAction implements EntityRequestAction {
  public guid: string;
  constructor(
    public endpointGuid: string,
  ) {
    this.guid = endpointGuid;
  }
  type = AUTOSCALER_INFO;
  entity = autoscalerEntityFactory(appAutoscalerInfoEntityType);
  entityType = appAutoscalerInfoEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
}

export class GetAppAutoscalerHealthAction implements EntityRequestAction {
  public guid: string;
  constructor(
    public endpointGuid: string,
  ) {
    this.guid = endpointGuid;
  }
  type = APP_AUTOSCALER_HEALTH;
  entity = autoscalerEntityFactory(appAutoscalerHealthEntityType);
  entityType = appAutoscalerHealthEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
}

export class GetAppAutoscalerPolicyAction implements EntityRequestAction {
  constructor(
    public guid: string,
    public endpointGuid: string,
  ) { }
  type = APP_AUTOSCALER_POLICY;
  entity = autoscalerEntityFactory(appAutoscalerPolicyEntityType);
  entityType = appAutoscalerPolicyEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
}

export class CreateAppAutoscalerPolicyAction implements EntityRequestAction {
  constructor(
    public guid: string,
    public endpointGuid: string,
    public policy: AppAutoscalerPolicyLocal,
  ) { }
  type = CREATE_APP_AUTOSCALER_POLICY;
  entityType = appAutoscalerPolicyEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
}

export class UpdateAppAutoscalerPolicyAction extends CreateAppAutoscalerPolicyAction {
  static updateKey = 'Updating-Existing-Application-Policy';
  type = UPDATE_APP_AUTOSCALER_POLICY;
  updatingKey = UpdateAppAutoscalerPolicyAction.updateKey;
  entityType = appAutoscalerPolicyEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
}

export class DetachAppAutoscalerPolicyAction implements EntityRequestAction {
  static updateKey = 'Detaching-Existing-Application-Policy';
  constructor(
    public guid: string,
    public endpointGuid: string,
  ) { }
  type = DETACH_APP_AUTOSCALER_POLICY;
  entityType = appAutoscalerPolicyEntityType;
  requestType: ApiRequestTypes = 'delete';
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
}

export class GetAppAutoscalerPolicyTriggerAction implements PaginatedAction {
  constructor(
    public paginationKey: string,
    public guid: string,
    public endpointGuid: string,
    public normalFormat?: boolean
  ) {
    this.paginationKey = this.paginationKey || createEntityRelationPaginationKey(applicationEntityType, guid);
  }
  actions = [
    AppAutoscalerPolicyTriggerEvents.GET_APP_AUTOSCALER_POLICY,
    AppAutoscalerPolicyTriggerEvents.GET_APP_AUTOSCALER_POLICY_SUCCESS,
    AppAutoscalerPolicyTriggerEvents.GET_APP_AUTOSCALER_POLICY_FAILED
  ];
  type = APP_AUTOSCALER_POLICY_TRIGGER;
  entity = [autoscalerEntityFactory(appAutoscalerPolicyTriggerEntityType)];
  entityType = appAutoscalerPolicyTriggerEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
  options: HttpRequest<any>;
  query: AutoscalerQuery = {
    metric: 'policy'
  };
  windowValue: string;
}

export interface AutoscalerPaginationParams extends PaginationParam {
  'order-direction-field'?: string;
  'order-direction': 'asc' | 'desc';
  'results-per-page': string;
  'start-time': string;
  'end-time': string;
  'page'?: string;
  'order'?: string;
}

export interface AutoscalerQuery {
  metric: string;
  params?: {
    start: number;
    end: number
  };
}

export class GetAppAutoscalerScalingHistoryAction implements PaginatedAction {
  private static sortField = 'timestamp';
  constructor(
    public paginationKey: string,
    public guid: string,
    public endpointGuid: string,
    public normalFormat?: boolean,
    public params?: AutoscalerPaginationParams,
  ) {
    this.paginationKey = this.paginationKey || createEntityRelationPaginationKey(applicationEntityType, guid);
  }
  actions = [
    AppAutoscalerScalingHistoryEvents.GET_APP_AUTOSCALER_SCALING_HISTORY,
    AppAutoscalerScalingHistoryEvents.GET_APP_AUTOSCALER_SCALING_HISTORY_SUCCESS,
    AppAutoscalerScalingHistoryEvents.GET_APP_AUTOSCALER_SCALING_HISTORY_FAILED
  ];
  type = APP_AUTOSCALER_SCALING_HISTORY;
  entity = [autoscalerEntityFactory(appAutoscalerScalingHistoryEntityType)];
  entityType = appAutoscalerScalingHistoryEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
  options: HttpRequest<any>;
  initialParams: AutoscalerPaginationParams = {
    'order-direction-field': GetAppAutoscalerScalingHistoryAction.sortField,
    'order-direction': 'desc',
    'results-per-page': '5',
    'start-time': '0',
    'end-time': '0',
  };
  query: AutoscalerQuery = {
    metric: 'history'
  };
  windowValue: string;
}

export abstract class GetAppAutoscalerMetricAction implements PaginatedAction {
  constructor(
    public guid: string,
    public endpointGuid: string,
    public metricName: string,
    public skipFormat: boolean,
    public trigger: AppScalingTrigger,
    public params: AutoscalerPaginationParams,
  ) {
    this.paginationKey = this.paginationKey || createEntityRelationPaginationKey(applicationEntityType, guid, metricName);
  }
  actions = [
    AppAutoscalerMetricEvents.GET_APP_AUTOSCALER_METRIC,
    AppAutoscalerMetricEvents.GET_APP_AUTOSCALER_METRIC_SUCCESS,
    AppAutoscalerMetricEvents.GET_APP_AUTOSCALER_METRIC_FAILED
  ];
  url: string;
  type = FETCH_APP_AUTOSCALER_METRIC;
  entityType: string;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
  paginationKey: string;
  initialParams = this.params;
}

export class GetAppAutoscalerAppMetricAction extends GetAppAutoscalerMetricAction implements PaginatedAction {
  constructor(
    public guid: string,
    public endpointGuid: string,
    public metricName: string,
    public skipFormat: boolean,
    public trigger: AppScalingTrigger,
    public params: AutoscalerPaginationParams,
  ) {
    super(guid, endpointGuid, metricName, skipFormat, trigger, params);
    this.url = `apps/${guid}/metric/${metricName}`;
  }
  entityType = appAutoscalerAppMetricEntityType;
}

export class UpdateAppAutoscalerCredentialAction implements EntityRequestAction {
  static updateKey = 'Updating-Application-Credential';
  constructor(
    public guid: string,
    public endpointGuid: string,
    public credential?: AppAutoscalerCredential,
  ) { }
  type = UPDATE_APP_AUTOSCALER_CREDENTIAL;
  entity = autoscalerEntityFactory(appAutoscalerCredentialEntityType);
  entityType = appAutoscalerCredentialEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
  updatingKey = UpdateAppAutoscalerCredentialAction.updateKey;
}

export class DeleteAppAutoscalerCredentialAction implements EntityRequestAction {
  constructor(
    public guid: string,
    public endpointGuid: string,
  ) { }
  type = DELETE_APP_AUTOSCALER_CREDENTIAL;
  entity = autoscalerEntityFactory(appAutoscalerCredentialEntityType);
  entityType = appAutoscalerCredentialEntityType;
  endpointType = AUTOSCALER_ENDPOINT_TYPE;
  requestType: ApiRequestTypes = 'delete';
}