Production Monitoring
Monitoring the screenly/chrome-extension in a production environment can be accomplished through a combination of Docker, webpack, and test automation frameworks. This documentation outlines the necessary steps and code snippets pertinent to ensuring that the application remains functional and efficient.
Step 1: Docker Environment Setup
Docker provides a consistent environment for running the application. The Dockerfile contains all the necessary instructions to set up the environment in which the app runs.
FROM node:22
WORKDIR /app
RUN mkdir -p /output
RUN chmod -R 777 /output
RUN apt-get update --fix-missing \
&& apt-get install -y \
ca-certificates \
fonts-liberation \
gconf-service \
libappindicator1 \
libasound2 \
libatk1.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libgcc1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libstdc++6 \
libx11-6 \
libx11-xcb1 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxss1 \
libxtst6 \
&& rm -rf /var/lib/apt/lists/*
ADD package.json /app/package.json
ADD package-lock.json /app/package-lock.json
RUN npm install --quiet
ADD . /app
Step 2: Continuous Integration with Docker Compose
Using docker-compose.yml, set up a service that utilizes webpack for building and monitoring the application. The service will watch for any code changes automatically.
services:
webpack:
build: .
command: npx webpack --watch --config webpack.dev.js
image: sce_webpack:latest
volumes:
- .:/app:delegated
- /app/node_modules/ # exclude from volume mount; we want this inside the container
environment:
- JEKYLL_ENV=development
Step 3: Test Automation
Monitoring includes testing the application’s integrity. A testing script should be created to validate that the application behaves correctly. The following is a script for running tests using Docker:
#!/usr/bin/env bash
set -euo pipefail
docker compose build
docker run \
--rm -ti \
-v $(pwd):/app:delegated \
-v /app/node_modules \
sce_webpack:latest \
/bin/bash -c "npx webpack --config webpack.dev.js && npm test"
Step 4: Mocking Browser Storage
During testing, it is essential to mock the browser’s storage to verify that the application interacts properly with it. Below is an example of StateMocker, which stubs browser storage methods.
class StateMocker {
constructor() {
if (!window.browser) {
window.browser = {
storage: {
sync: {
set: () => {},
get: () => {},
remove: () => {},
}
}
}
}
this.fakeStorage = {};
this.nextFailure = null;
spyOn(browser.storage.sync, 'set').and.callFake(d => {
if (this.nextFailure) {
const theFailure = this.nextFailure;
this.nextFailure = null;
return Promise.reject(new Error(theFailure));
}
for (const [key, value] of Object.entries(d)) {
this.fakeStorage[key] = value;
}
return Promise.resolve();
});
spyOn(browser.storage.sync, 'get').and.callFake(keys => {
if (typeof keys == "string") {
return Promise.resolve({keys: this.fakeStorage[keys]});
}
if (Array.isArray(keys)) {
let r = {};
for (const key of keys) {
r[key] = this.fakeStorage[key];
}
return Promise.resolve(r);
}
throw "Unimplemented";
});
spyOn(browser.storage.sync, 'remove').and.callFake(keys => {
if (typeof keys == "string") {
delete this.fakeStorage[keys];
return Promise.resolve();
}
if (Array.isArray(keys)) {
for (const key of keys) {
delete this.fakeStorage[key];
}
return Promise.resolve();
}
});
}
setNextFailure(aFailure) {
this.nextFailure = aFailure;
}
}
Step 5: Release Management
For version control and release management, ensure to follow the steps documented in the README to create a new release tag in Git, draft a release in GitHub, and verify that the package is generated correctly using the CLI.
$ git pull
$ git checkout master
$ git tag
$ git tag -a vX.Y.Z -m "tl;dr changelog."
$ git push origin vX.Y.Z
Conclusion
These steps outline a robust strategy for monitoring the screenly/chrome-extension in a production environment effectively. Utilizing Docker, continuous integration, and automated testing ensures that the application remains stable, efficient, and ready for deployment.
Source:
- Code snippets and configuration details derived from the
Dockerfile,docker-compose.yml, and JavaScript test utilities in the project files.