Skip to content

Commit

Permalink
Implement power off all minion in backend API #100
Browse files Browse the repository at this point in the history
  • Loading branch information
haimkastner committed Jan 21, 2020
1 parent 811cd39 commit 3285003
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 5 deletions.
22 changes: 22 additions & 0 deletions backend/src/business-layer/minionsBl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
ProgressStatus,
} from '../models/sharedInterfaces';
import { ModulesManager, ModulesManagerSingltone } from '../modules/modulesManager';
import { DeepCopy } from '../utilities/deepCopy';
import { logger } from '../utilities/logger';
import { Delay } from '../utilities/sleep';
import { DevicesBl, DevicesBlSingleton } from './devicesBl';
Expand Down Expand Up @@ -291,6 +292,27 @@ export class MinionsBl {
});
}

/**
* Set all minions status off.
*/
public async powerAllOff() {
logger.info(`Setting all minions power off ...`);

for (const minion of this.minions) {
try {
if (minion.minionStatus[minion.minionType].status === 'off') {
continue;
}

const statusToSet = DeepCopy<MinionStatus>(minion.minionStatus);
statusToSet[minion.minionType].status = 'off';
await this.setMinionStatus(minion.minionId, statusToSet);
} catch (error) {
logger.warn(`Set minion ${minion.minionId} power off failed, ${error ? error.message : 'unknown'}`);
}
}
}

/**
* Create new minion
* @param minion minion to create.
Expand Down
17 changes: 14 additions & 3 deletions backend/src/controllers/minionsController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,17 @@ export class MinionsController extends Controller {
return await TimelineBlSingleton.getTimeline();
}

/**
* Power off all minions
*/
@Security('userAuth')
@Security('adminAuth')
@Response<ErrorResponse>(501, 'Server error')
@Put('power-off')
public async powerAllOff(): Promise<void> {
return await MinionsBlSingleton.powerAllOff();
}

/**
* Update minion name.
* @param minionId Minion id.
Expand Down Expand Up @@ -86,7 +97,7 @@ export class MinionsController extends Controller {

/**
* Update minion auto turns off timeout.
* @param minionId Minon id.
* @param minionId Minion id.
* @param setCalibrate Timeout property.
*/
@Security('userAuth')
Expand Down Expand Up @@ -137,7 +148,7 @@ export class MinionsController extends Controller {

/**
* Delete minion from the system.
* @param minionId Minon id.
* @param minionId Minion id.
*/
@Security('userAuth')
@Security('adminAuth')
Expand All @@ -161,7 +172,7 @@ export class MinionsController extends Controller {

/**
* Notify minion status changed by ifttt webhook (https://ifttt.com/maker_webhooks).
* @param minionId Minon id.
* @param minionId Minion id.
* @param iftttOnChanged Minion key amd status to set.
*/
@Response<ErrorResponse>(501, 'Server error')
Expand Down
4 changes: 2 additions & 2 deletions backend/src/models/sharedInterfaces.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,7 @@ export declare interface Minion {
}

/**
* Represents acivity.
* Represents activity.
*/
export declare interface OperationActivity {
/** Minion id to set */
Expand Down Expand Up @@ -693,7 +693,7 @@ export declare interface VersionInfo {
version: string;
/** Current local master/HEAD commit hash */
commintHash: string;
/** Time stamp of HEAD commint in UTC format */
/** Time stamp of HEAD commit in UTC format */
timestamp: number;
}

Expand Down
23 changes: 23 additions & 0 deletions backend/src/routers/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -583,6 +583,29 @@ export function RegisterRoutes(app: express.Express) {
const promise = controller.getMinionsTimeline.apply(controller, validatedArgs as any);
promiseHandler(controller, promise, response, next);
});
app.put('/API/minions/power-off',
authenticateMiddleware([{ "userAuth": [] }, { "adminAuth": [] }]),
function(request: any, response: any, next: any) {
const args = {
};

let validatedArgs: any[] = [];
try {
validatedArgs = getValidatedArgs(args, request);
} catch (err) {
response.status(422).send({
responseCode: 1422,
message: JSON.stringify(err.fields),
} as ErrorResponse);
return;
}

const controller = new MinionsController();


const promise = controller.powerAllOff.apply(controller, validatedArgs as any);
promiseHandler(controller, promise, response, next);
});
app.put('/API/minions/rename/:minionId',
authenticateMiddleware([{ "userAuth": [] }, { "adminAuth": [] }]),
function(request: any, response: any, next: any) {
Expand Down

0 comments on commit 3285003

Please sign in to comment.