Skip to content
This repository was archived by the owner on Mar 26, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Create and publish Docker image

on:
push:
# Publish `main` as Docker `latest` image.
branches:
- main

# Publish `v1.2.3` tags as releases.
tags:
- v*

# Run for any PRs.
pull_request:

env:
IMAGE_NAME: ${{ github.repository }}

jobs:
# Push image to GitHub Packages.
# See also https://docs.docker.com/docker-hub/builds/
push:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read

steps:
- uses: actions/checkout@v2

- name: Build image
run: docker build . -t $IMAGE_NAME --label "runnumber=${GITHUB_RUN_ID}"

- name: Log in to registry
# This is where you will update the PAT to GITHUB_TOKEN
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

- name: Push image
run: |
IMAGE_ID=ghcr.io/$IMAGE_NAME

# Change all uppercase to lowercase
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
# Strip git ref prefix from version
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
# Strip "v" prefix from tag name
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
# Use Docker `latest` tag convention
[ "$VERSION" == "main" ] && VERSION=latest
echo IMAGE_ID=$IMAGE_ID
echo VERSION=$VERSION
docker tag $IMAGE_NAME $IMAGE_ID:$VERSION
docker push $IMAGE_ID:$VERSION
6 changes: 6 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FROM node:16-alpine
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
CMD ["npm", "start"]
82 changes: 53 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,59 +1,83 @@
# Parallel Piper

Simple mobile web app for sending data to a Splunk HTTP input. It measures the device motion and sends an event with
Simple mobile web app for sending data to a Splunk HTTP input. It measures the device motion and sends an event with
the intensity of the motion to Splunk.

## Build/Deploy
## Development

Ensure that you have Node 16 installed. Then follow these steps:

1. Install NPM deps

1) Install NPM deps
```
npm install
```

2) Run webpack build
2. Run webpack build

```
npm run build
```

This generates the page, JS and all the static content in the `dist` directory.

Run `build.sh` in the source directory.
3. Run NodeJS server

```
$ sh build.sh
npm run dev
```

The following environment variables need to be defined for specifying the Splunk
server running the HTTP input.
This will start the server on https://localhost:3000/.

- `PP_SPLUNK_HOST` (default is `"localhost"`)
- `PP_SPLUNK_PORT` (default is `8088`)
- `PP_SPLUNK_SSL` (default is `false`)
- `PP_SPLUNK_TOKEN` (required) token for the HTTP input (See Splunk Setup below.)
## Build

Then run the webpack build:
Github Actions are building a docker container for you on each commit to `main`.

You can also run the build locally by calling:

```
PP_SPLUNK_TOKEN=cafecafecafecafe \
PP_SPLUNK_HOST=my.host.com \
./node_modules/webpack/bin/webpack.js -p
docker build -t shaker .
```

This generates all the page, JS and all the static content in the `dist` directory. Simply
copy it to a webserver-exposed folder.
To run the image then on port 3000, call:

# Splunk Setup
```
docker run -p 3000:3000 shaker
```

To enable the splunk HTTP Event Collector and create a token follow the instructions posted here:

http://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector
> Note: Just running the image, it is not forwarding the events to a Splunk instance. For this, you have to set environment variables, which are specified in the next section.

## Deployment

Once you have your token make sure you update your `PP_SPLUNK_TOKEN` in the previous section.
The following environment variables need to be defined for specifying the Splunk
server that should receive the events:

Parallel Piper makes use of cross-origin resource sharing which requires you to enable CORS on the HTTP event collector.
- `PP_SPLUNK_HOST` (default is `"localhost"`)
- `PP_SPLUNK_PORT` (default is `8088`)
- `PP_SPLUNK_SSL` (default is `false`)
- `PP_SPLUNK_TOKEN` (required) token for the HTTP input (See Splunk Setup below.)

To do this edit your `$SPLUNK_HOME/etc/system/local/server.conf` and add the following.
Usually you will set these environment variables in your deployment descriptor. The folder [`kubernetes-manifests`](./kubernetes-manifests/) contains a sample deployment descriptor for Kubernetes based on the [Splunk Operator](https://splunk.github.io/splunk-operator/).

You can apply it by calling:

```
[httpServer]
crossOriginSharingPolicy = *
kubectl apply -f ./kubernetes-manifests/
```

If you wish to restrict cors calls to a specific domain replace the asterix with the domain name your are hosting
Parallel Piper on.
If you're using this example descriptor in production, make sure to change the `PP_SPLUNK_TOKEN` environment variable and match it with the `SPLUNK_HEC_TOKEN` configuration.

> **Note**: The mobile Chrome browser is not supporting [DeviceMotionEvent](https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent) over HTTP, therefore ensure that this app is served via HTTPS. As the docker image doesn't do any TLS termination, make sure that the Kubernetes ingress controller (e.g. [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/) for EKS) is doing this for you.

For testing, you can also run the image locally and set the environment variables:

```
docker run -p 3000:3000 -e PP_SPLUNK_TOKEN=cafecafecafecafe -e PP_SPLUNK_HOST=my.host.com shaker
```

# Splunk Setup

To enable the splunk HTTP Event Collector and create a token follow the instructions posted here:
http://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector

Once you have your token make sure you update your `PP_SPLUNK_TOKEN` environment variable.
7 changes: 0 additions & 7 deletions build.sh

This file was deleted.

27 changes: 27 additions & 0 deletions cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN CERTIFICATE-----
MIIEpDCCAowCCQD3lHEXyFfYIjANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
b2NhbGhvc3QwHhcNMjMwMzI3MDkwMDA0WhcNMjQwMzI2MDkwMDA0WjAUMRIwEAYD
VQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDD
HYeAaKOOasFjkQs5qYMwp60iYwkjwDmlntcp+AT9k4sgxxOOgAxQ5iDUuaE8IKFz
Jvktvpz510CeQxHDI8L200T1o/GpUoMhxD/g7WUPHa5mzhZm7/3cDeThmW5yB2Hw
OlxUlWroKz2INwjTMv2JFMfS8/LKZWCkk4djdMkLL7AMOW+SU0tRNeZVp10vELWj
N3NkII0NaHPT8ERvtgQfcm+G8Hsspvwx6wCf97cdOtEgYYSMMO/BBtZ0OGEvWHtq
QLtMICID3Z3enaZD/hzJ37rB6NDqo27bDezylmeTpGKY80+FXOnV6Qka82t2Bv8Y
LSWGap+QzJN4sDZO8r2zngRA7u/agOOYZNVa79+dGG7e3rWWaYnZxGS5/fmVruyQ
MvcHfr/ALIC73tXbJdc2ZOewKth5/mI+aD43QZF966hKDE76yB2Cug6KhzUFgJQ2
39ZbCaeQ/+UATOd/kSvSxDXD2sdSWs1oflrrWHcNddcFZzcD8WG0Z7gfuPRMuSG8
sipTBGeC8ARKUiq3McHOXc38JB4A5zW8X5EapGi0l73UdEBBlhqb8OA2K7Sc8y9y
8Au3bKHxOZO+oiSdWtcr0VyLXHvx+17yU5rOTSupfXfXIo8pbQ254QqJGRjmOvat
rGR8f7LKuX5ZHOz/Mu1yAia2Tazr77m9rzx+S4T84wIDAQABMA0GCSqGSIb3DQEB
CwUAA4ICAQCpMuASTc2A/aLlJWDrdEIp51MdE673g5syFl8pEdut+vs3w3HtQ7Lc
xF2FOJnNcCkHuLXqS1vNoYqiTwQw+gCBZ3DDIx/UoifIJ8dhSmcQ4x6Sbocv4qz4
B/MBiYOyRAtqFeB3M7f0VtnX3muFNyU4SG++5gWUlid1y8EQLbFhAs2hnLeu9Z/g
bC6OEF+BAmSpReF6lPkzTMLuhvdYdGY9E5zWaqNlPwKcUMEp0wSjYKu0neapE9o4
FaFdfPyGpLbstKsqb4ibo7fgNtnnKj/r3G4vzmRB5I2fLIIr2i8Je8myjevqPbjO
jJrv93xEscSVIG9RDXwnSKRVoKbidZ9dNECjAXMOR+cn1gRzSdoITkwaKKK+s1kZ
/NeeRbHP41uYzupZLr2a3ujnduGNW44lh0P43j9DzAuRYvqlMJJFioGYa1PsNBmi
nz5ScOv0Xdw4z46PrgstWbFbIPpGZw/zNldCD4bp60aOdLX2LAQv2UcgKnt04PYT
aldoDHhMbkEGUuOeyx0Jg6e2oaSVpZDEYuDB9c3A1SR+Wvr+I+42HLP+L8pDDlNo
qpGU8z3dz47U6GsHsgI8zUONR8hoNpnpBeEd6xnaxxcfeFKl9rLvJXLCFmXQaXFS
+qeSquKqjNqKBWD4prWbOtJDSEq55OqJnlwafH69MXqKSB3VgNysFQ==
-----END CERTIFICATE-----
52 changes: 52 additions & 0 deletions key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQDDHYeAaKOOasFj
kQs5qYMwp60iYwkjwDmlntcp+AT9k4sgxxOOgAxQ5iDUuaE8IKFzJvktvpz510Ce
QxHDI8L200T1o/GpUoMhxD/g7WUPHa5mzhZm7/3cDeThmW5yB2HwOlxUlWroKz2I
NwjTMv2JFMfS8/LKZWCkk4djdMkLL7AMOW+SU0tRNeZVp10vELWjN3NkII0NaHPT
8ERvtgQfcm+G8Hsspvwx6wCf97cdOtEgYYSMMO/BBtZ0OGEvWHtqQLtMICID3Z3e
naZD/hzJ37rB6NDqo27bDezylmeTpGKY80+FXOnV6Qka82t2Bv8YLSWGap+QzJN4
sDZO8r2zngRA7u/agOOYZNVa79+dGG7e3rWWaYnZxGS5/fmVruyQMvcHfr/ALIC7
3tXbJdc2ZOewKth5/mI+aD43QZF966hKDE76yB2Cug6KhzUFgJQ239ZbCaeQ/+UA
TOd/kSvSxDXD2sdSWs1oflrrWHcNddcFZzcD8WG0Z7gfuPRMuSG8sipTBGeC8ARK
Uiq3McHOXc38JB4A5zW8X5EapGi0l73UdEBBlhqb8OA2K7Sc8y9y8Au3bKHxOZO+
oiSdWtcr0VyLXHvx+17yU5rOTSupfXfXIo8pbQ254QqJGRjmOvatrGR8f7LKuX5Z
HOz/Mu1yAia2Tazr77m9rzx+S4T84wIDAQABAoICAGnZwUMWgXSn0daUP4S+w59H
uBOpqrGsfRmuvIfWN87hll7n4WIzcXsJ/dGqCyC1iyEPiasZd8vKzRGOzToSUpjZ
MNYaZOY5D07oSsdZwrOapJy9PUYG+K/DEeKZ/GL8QlOzNZfln6PooW8efDkntogB
sA5vrc3DhdSC/LYmC1N4QYfAORkm+vtJxHW/YDxCUmgDkyREzIDzo7Lc7CO2mTH+
QSbxm8Ezrinele4y0zKWUBHDFceAXPFZJkrSs1aeKAYSrAm2fP2f4x98Y1ELsM6M
A6NjDMPeeit4uI06r2JXke3sQb3WFD2qOPhYCnpzfTy+cVckzQAfG/ojjrLx2Zt/
pVJDGNviW6OKsTtrtHzPha2xsNvshD4Vu7n9N6AucL9zPZeNmAyzuZKeDegDMjXA
sdiTow/9Pa/pql9/9uRSwWOrgwVidbLt1mZisEtwD67TmRLYg4uiGhxKN4Rb1fQN
peYvchtwZ4IM5n0BZZvTWyEXK16/Ba6hKVXfSh6VPxkupRUbqT+HtpeDRKfegSqH
+nvBNipveV8MxdB3+bM2UsJjol6+OXyOvB/xcN74rQNIqHR4f9z5tM8By3CBGTdc
xWixlbvClnSRnXjoXTQrnAOw4nfSN43C/mp78trlXITRxM8Zt1qlwOk8n8PXXKRV
Sag9H7dQ2VnYonBZmjohAoIBAQDfw8qXMSMIxo3roYII3a950yKf0SjW5HzGdQS6
4G1wKEHh7lgWgUkwEulRLnisgaprF989SHVzC/p8n5SXhPsliOZLKVE/t1BV8NHP
RViGtCZ/2/TyJ/FLDzJL7HdR6XTQa01E475fcZQr/jn7qTbYveFMzIEUCzOnjekN
lL2upuY3EGzRozxttmVwTQaCIdJod6WQUbcH7aKi7vPCcccsW7/CTfVxsknYUGHu
PXwRQm45XpPV86H0qKbE6QxpQt9yj6vpHVW0VHwNs1f3LQ6/yo4m4fSPzwALzQS1
QGP5xHa9l6jKy88t1SFwUxvyS8k2aBUiBvxnwRRQmGuFUmXpAoIBAQDfOS0czz3V
LHqm55D6l9IV4p7x5w08s6ijfMOkO7kZw9Es1m+IKJ3tTm04AnB6U4Jr9D2Vntpk
NnmNkS1ElEckuPDF+xK3//iefJdfik8Jx6YEXK4OAXV4zQDK4PoyXlHFsd4+9vR2
YGBv2ccB6tFoeK+dRXHPuem5pEQOuSkPa+ppxnpnfB6kIWbVpyz0gpXHEzuxjN7o
KxCp1ZitjzhNdXV+STPYFR9jxXseI1tlQnyHeRKWx4AIaI+O0Wq/076Cgh9/XLqL
mch8WkZTTQMVAECNYYpeyH80PW87nXl7rmswzQW3XIv2JHcgcm03f30l6DUlT+6T
ndxRuLPNP/DrAoIBAFbaimJRIkYfu6qAUBbc5WWl/ESITQ/MNFpbxXA7+H6WQaxO
dUaW/C96x7FJFnHvCpTy+SWyYFQ9jAafcm+1oD4bezglW3Id10LkbKvFQO1YM7Fh
URxFQLVfuqgZqt7SfRMA80cQFy64yUiiLyNttOpAGZlTr652AqDAxnsNBuspwSYS
bAqbD7OOHqWOYD5WnnMKLetsrFyZco1HrroEq8id/DqRQ/nTuDIMUVbF6shQPrRp
73wWSwDKDaFUzAp3eH/hIFsllcSfHl+7AyPgC1+KYc7Z2bGQKXZrJ66qxaOHDIfe
vBerMEmb9pTAzZIotHs3vywsBgDHwvjdkK55IzECggEAAPXkBc22fGZWmMVCUHG6
y7FP8caGvg4f2aQ9y0UehMfc7I53qGRUWaMOwUDxbvVRCFnisfQfCHNbjopjYXop
3DSXhKKR8Ay/6x6qIBUeRfJ/+mDTtue2s7BeIoFZUkIpo+oiBK9XWfMMNy7+tjlm
cUajqs+Tr8sjAFN+n3mYfaJ/PblG6Y8VKquiH6U6gkrVjie9CASNKP6WccSjhYuq
OFsbCFIUUQe2PN2qq/SG/iaNFqAkvlVZba/Vfk3UYcLtfO5GaGvjuZoNzMsupkkc
jEiV/oW+7K18LqNdCSqiTS/w8iLPtXxGdeauRIt5gNWhmjonkGOJqUTyn79ltqph
xQKCAQBHphOy71lQr/+B/cqKtX/0YRK0u+WNjgVibqZE94luUgymX0VplIy6W7RO
xE/5wv2aBhyDLpMZ4gPBh8uHAbt/wjLJ2CqGgB39eIBvdlursvNNaV0f/2SG6u8G
d/W7bVqOPS1k7/YkihrTnyo7TGMV0SAUHMAsXs+rm7MTOoTaMIvmL8yh1D3u0YRn
ocXQsEs1HQwjzsBkWgEaM+/9G+GaTmxSmQS1H4KIwBrSOCt/EzEUg9ymVTMvJSBj
Z3mfMYOEWf9F3cFBB7ErzQKYPMM1ktPV7/xMEirBTem8lso6nUGQEFJxV5Gq5dRg
cx1OGv4fPSYe4IWwSWrviYpTyDiq
-----END PRIVATE KEY-----
12 changes: 12 additions & 0 deletions kubernetes-manifests/1-splunk.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: enterprise.splunk.com/v3
kind: Standalone
metadata:
namespace: parallel-piper
name: prod-parallel-piper
finalizers:
- enterprise.splunk.com/delete-pvc
spec:
image: splunk/splunk:9.0
extraEnv:
- name: SPLUNK_HEC_TOKEN
value: "11111111-1111-1111-1111-11111111"
39 changes: 39 additions & 0 deletions kubernetes-manifests/2-app.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: parallel-piper
name: parallel-piper
spec:
selector:
matchLabels:
app.kubernetes.io/name: app-parallel-piper
replicas: 2
template:
metadata:
labels:
app.kubernetes.io/name: app-parallel-piper
spec:
containers:
- image: ghcr.io/marcusschiesser/parallel-piper:1.1.0
name: app-parallel-piper
env:
- name: PP_SPLUNK_HOST
value: "splunk-prod-parallel-piper-standalone-service"
- name: PP_SPLUNK_TOKEN
value: "11111111-1111-1111-1111-11111111"
- name: PP_SPLUNK_SSL
value: "true"
---
apiVersion: v1
kind: Service
metadata:
namespace: parallel-piper
name: service-parallel-piper
spec:
ports:
- port: 3000
targetPort: 3000
protocol: TCP
selector:
app.kubernetes.io/name: app-parallel-piper
Loading