diff --git a/Dockerfile b/Dockerfile index e71852c..7eb913a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ FROM node:12-alpine WORKDIR /room-assistant -RUN apk add --no-cache bluez bluez-deprecated libusb avahi-dev bind-tools dmidecode tini \ +RUN apk add --no-cache bluez bluez-deprecated libusb avahi-dev bind-tools dmidecode tini curl \ && setcap cap_net_raw+eip $(eval readlink -f `which node`) \ && setcap cap_net_raw+eip $(eval readlink -f `which hcitool`) \ && setcap cap_net_admin+eip $(eval readlink -f `which hciconfig`) \ @@ -17,3 +17,4 @@ COPY --from=build /usr/local/lib/node_modules/room-assistant /usr/local/lib/node ENTRYPOINT ["tini", "--", "room-assistant"] CMD ["--digResolver"] +HEALTHCHECK --start-period=15s CMD curl --fail http://localhost:6415/status/ || exit 1 diff --git a/dev.Dockerfile b/dev.Dockerfile index 14052a7..2f47878 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -9,12 +9,13 @@ FROM node:12-alpine WORKDIR /room-assistant -RUN apk add --no-cache bluez bluez-deprecated libusb avahi-dev bind-tools dmidecode \ +RUN apk add --no-cache bluez bluez-deprecated libusb avahi-dev bind-tools dmidecode tini curl \ && setcap cap_net_raw+eip $(eval readlink -f `which node`) \ && setcap cap_net_raw+eip $(eval readlink -f `which hcitool`) \ && setcap cap_net_admin+eip $(eval readlink -f `which hciconfig`) \ && ln -s /usr/local/lib/node_modules/room-assistant/bin/room-assistant.js /usr/local/bin/room-assistant COPY --from=build /usr/local/lib/node_modules/room-assistant /usr/local/lib/node_modules/room-assistant -ENTRYPOINT ["room-assistant"] +ENTRYPOINT ["tini", "--", "room-assistant"] CMD ["--digResolver"] +HEALTHCHECK --start-period=15s CMD curl --fail http://localhost:6415/status/ || exit 1 diff --git a/docker-compose.yml b/docker-compose.yml index a66a9c0..9495939 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,9 @@ version: '3' services: room-assistant: - build: . + build: + context: . + dockerfile: dev.Dockerfile network_mode: host environment: NODE_CONFIG: > diff --git a/src/status/status.controller.spec.ts b/src/status/status.controller.spec.ts new file mode 100644 index 0000000..64fb5b5 --- /dev/null +++ b/src/status/status.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { StatusController } from './status.controller'; + +describe('Status Controller', () => { + let controller: StatusController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [StatusController] + }).compile(); + + controller = module.get(StatusController); + }); + + it('should return healthy', () => { + expect(controller.health()).toEqual('healthy'); + }); +}); diff --git a/src/status/status.controller.ts b/src/status/status.controller.ts new file mode 100644 index 0000000..5e9f14c --- /dev/null +++ b/src/status/status.controller.ts @@ -0,0 +1,9 @@ +import { Controller, Get } from '@nestjs/common'; + +@Controller('status') +export class StatusController { + @Get() + health(): string { + return 'healthy'; + } +} diff --git a/src/status/status.module.ts b/src/status/status.module.ts index d615c25..a0b3078 100644 --- a/src/status/status.module.ts +++ b/src/status/status.module.ts @@ -3,9 +3,11 @@ import { StatusService } from './status.service'; import { ClusterModule } from '../cluster/cluster.module'; import { EntitiesModule } from '../entities/entities.module'; import { ConfigModule } from '../config/config.module'; +import { StatusController } from './status.controller'; @Module({ imports: [ClusterModule, EntitiesModule, ConfigModule], - providers: [StatusService] + providers: [StatusService], + controllers: [StatusController] }) export class StatusModule {}