├── .DS_Store
├── README.md
├── config-map
└── application.properties
├── docker-images
├── .DS_Store
├── blue
│ ├── Dockerfile
│ └── index.html
├── green
│ ├── Dockerfile
│ └── index.html
├── hello-world-v1
│ ├── Dockerfile
│ └── index.html
├── hello-world-v2
│ ├── Dockerfile
│ └── index.html
├── hello-world-v3
│ ├── Dockerfile
│ └── index.html
└── hello-world-v4
│ ├── Dockerfile
│ └── index.html
├── frontend
├── .dockerignore
├── .gitignore
├── Dockerfile
├── README.md
├── nginx.conf
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
└── src
│ ├── App.css
│ ├── App.js
│ ├── index.css
│ └── index.js
├── microservices
├── .DS_Store
├── customer
│ ├── .DS_Store
│ ├── Dockerfile
│ ├── package-lock.json
│ ├── package.json
│ └── server.js
└── order
│ ├── .DS_Store
│ ├── Dockerfile
│ ├── package-lock.json
│ ├── package.json
│ └── server.js
└── yamls
├── config-maps.yaml
├── cron-job.yaml
├── customer-deployment.yaml
├── daemon-set.yaml
├── deployment.yaml
├── empty-dir-volume.yaml
├── frontend.yaml
├── host-path-volume.yaml
├── job.yaml
├── namespaces.yaml
├── order-deployment.yaml
├── pod.yaml
├── pull-secret.yaml
├── pv-pvc.yaml
└── secrets.yaml
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amigoscode/kubernetes/2cf15500c6d4ca6c3a280789389791d00bd9c1fb/.DS_Store
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # [Kubernetes Course][link]
2 | ## [Master Kubernetes A to Z][link]
3 | 
4 |
5 | [link]: https://amigoscode.com/p/kubernetes
6 |
7 |
--------------------------------------------------------------------------------
/config-map/application.properties:
--------------------------------------------------------------------------------
1 | db-url=localhost
2 |
--------------------------------------------------------------------------------
/docker-images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amigoscode/kubernetes/2cf15500c6d4ca6c3a280789389791d00bd9c1fb/docker-images/.DS_Store
--------------------------------------------------------------------------------
/docker-images/blue/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx
2 | COPY index.html /usr/share/nginx/html
--------------------------------------------------------------------------------
/docker-images/blue/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Blue
5 |
6 |
7 |
68 |
69 |
70 |
71 |
72 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/docker-images/green/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx
2 | COPY index.html /usr/share/nginx/html
--------------------------------------------------------------------------------
/docker-images/green/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Blue
5 |
6 |
7 |
68 |
69 |
70 |
71 |
72 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/docker-images/hello-world-v1/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx
2 | COPY index.html /usr/share/nginx/html
--------------------------------------------------------------------------------
/docker-images/hello-world-v1/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Learn Kubernetes
5 |
6 |
7 |
63 |
64 |
65 |
66 |
67 |
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/docker-images/hello-world-v2/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx
2 | COPY index.html /usr/share/nginx/html
--------------------------------------------------------------------------------
/docker-images/hello-world-v2/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Learn Kubernetes
5 |
6 |
7 |
70 |
71 |
72 |
73 |
74 |
91 |
92 |
93 |
--------------------------------------------------------------------------------
/docker-images/hello-world-v3/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx
2 | COPY index.html /usr/share/nginx/html
--------------------------------------------------------------------------------
/docker-images/hello-world-v3/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Learn Kubernetes
5 |
6 |
7 |
70 |
71 |
72 |
73 |
74 |
91 |
92 |
93 |
--------------------------------------------------------------------------------
/docker-images/hello-world-v4/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx
2 | COPY index.html /usr/share/nginx/html
--------------------------------------------------------------------------------
/docker-images/hello-world-v4/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Learn Kubernetes
5 |
6 |
7 |
70 |
71 |
72 |
73 |
74 |
91 |
92 |
93 |
--------------------------------------------------------------------------------
/frontend/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | build
3 | .dockerignore
4 | Dockerfile
5 | Dockerfile.prod
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/frontend/Dockerfile:
--------------------------------------------------------------------------------
1 | # build environment
2 | FROM node:alpine as build
3 | WORKDIR /app
4 | ENV PATH /app/node_modules/.bin:$PATH
5 | COPY package*.json ./
6 | RUN npm ci
7 | RUN npm install react-scripts@3.4.1 -g --silent
8 | COPY . ./
9 | RUN npm run build
10 |
11 | # production environment
12 | FROM nginx:stable-alpine
13 | COPY --from=build /app/build /usr/share/nginx/html
14 | COPY --from=build /app/nginx.conf /etc/nginx/conf.d/default.conf
15 | EXPOSE 80
16 | CMD ["nginx", "-g", "daemon off;"]
--------------------------------------------------------------------------------
/frontend/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
13 |
14 | The page will reload if you make edits.\
15 | You will also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
35 |
36 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
39 |
40 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
48 | ### Code Splitting
49 |
50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
51 |
52 | ### Analyzing the Bundle Size
53 |
54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
55 |
56 | ### Making a Progressive Web App
57 |
58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
59 |
60 | ### Advanced Configuration
61 |
62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
63 |
64 | ### Deployment
65 |
66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
67 |
68 | ### `npm run build` fails to minify
69 |
70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
71 |
--------------------------------------------------------------------------------
/frontend/nginx.conf:
--------------------------------------------------------------------------------
1 | server {
2 | listen 80;
3 |
4 | location / {
5 | root /usr/share/nginx/html;
6 | index index.html index.htm;
7 | try_files $uri $uri/ /index.html;
8 | }
9 |
10 | error_page 500 502 503 504 /50x.html;
11 |
12 | location = /50x.html {
13 | root /usr/share/nginx/html;
14 | }
15 |
16 | location /api/ {
17 | proxy_pass http://customer;
18 |
19 | proxy_set_header Host $host;
20 | proxy_set_header X-Forwarded-For $remote_addr;
21 | proxy_set_header X-Request-Id $request_id;
22 | }
23 | }
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.14.1",
7 | "@testing-library/react": "^11.2.7",
8 | "@testing-library/user-event": "^12.8.3",
9 | "antd": "^4.16.3",
10 | "axios": "^0.21.1",
11 | "react": "^17.0.2",
12 | "react-dom": "^17.0.2",
13 | "react-scripts": "4.0.3",
14 | "web-vitals": "^1.1.2"
15 | },
16 | "scripts": {
17 | "start": "react-scripts start",
18 | "build": "react-scripts build",
19 | "test": "react-scripts test",
20 | "eject": "react-scripts eject"
21 | },
22 | "eslintConfig": {
23 | "extends": [
24 | "react-app",
25 | "react-app/jest"
26 | ]
27 | },
28 | "browserslist": {
29 | "production": [
30 | ">0.2%",
31 | "not dead",
32 | "not op_mini all"
33 | ],
34 | "development": [
35 | "last 1 chrome version",
36 | "last 1 firefox version",
37 | "last 1 safari version"
38 | ]
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amigoscode/kubernetes/2cf15500c6d4ca6c3a280789389791d00bd9c1fb/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/frontend/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 |
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/frontend/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amigoscode/kubernetes/2cf15500c6d4ca6c3a280789389791d00bd9c1fb/frontend/public/logo192.png
--------------------------------------------------------------------------------
/frontend/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amigoscode/kubernetes/2cf15500c6d4ca6c3a280789389791d00bd9c1fb/frontend/public/logo512.png
--------------------------------------------------------------------------------
/frontend/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/frontend/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/frontend/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-logo {
6 | height: 40vmin;
7 | pointer-events: none;
8 | }
9 |
10 | @media (prefers-reduced-motion: no-preference) {
11 | .App-logo {
12 | animation: App-logo-spin infinite 20s linear;
13 | }
14 | }
15 |
16 | .App-header {
17 | background-color: #282c34;
18 | min-height: 100vh;
19 | display: flex;
20 | flex-direction: column;
21 | align-items: center;
22 | justify-content: center;
23 | font-size: calc(10px + 2vmin);
24 | color: white;
25 | }
26 |
27 | .App-link {
28 | color: #61dafb;
29 | }
30 |
31 | @keyframes App-logo-spin {
32 | from {
33 | transform: rotate(0deg);
34 | }
35 | to {
36 | transform: rotate(360deg);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/frontend/src/App.js:
--------------------------------------------------------------------------------
1 | import './App.css';
2 | import { useEffect, useState } from 'react';
3 | import { List, Button } from 'antd';
4 | import axios from "axios";
5 |
6 | const url = "/api/v1/customer"
7 |
8 | function App() {
9 | console.log(process.env.NODE_ENV);
10 |
11 | const [ customers, setCustomers ] = useState([]);
12 | const [ orders, setOrders ] = useState([]);
13 |
14 | const fetchOrder = id => {
15 | console.log("fetching orders for customer " + id)
16 | axios.get(url + "/" + id + "/orders")
17 | .then(res => {
18 | setOrders(res.data.items)
19 | }).catch(console.log)
20 | }
21 |
22 | useEffect(() => {
23 | console.log(url)
24 | axios.get(url)
25 | .then(res => {
26 | console.log("Success")
27 | console.log(res.data)
28 | setCustomers(res.data)
29 | }).catch(err => {
30 | console.log("Error")
31 | console.log(err);
32 | })
33 | }, []);
34 |
35 | console.log(customers);
36 |
37 | return <>
38 |
39 | {customers.length < 1 ? "no data" :
40 | Customers}
43 | footer={"Data coming from customer microservice"}
44 | bordered
45 | dataSource={customers}
46 | renderItem={item =>
47 | {`Name: ${item.name} | Gender: ${item.gender} | Address: ${item.address}`} -
48 | }
49 | />
50 |
51 | }
52 | {orders && orders.length < 1 ? "No customer selected" :
Orders}
55 | footer={"Data coming from order microservice via customer"}
56 | bordered
57 | dataSource={orders}
58 | renderItem={item =>
59 | {`Item ${item}`}
60 | }
61 | />}
62 |
63 | >
64 | }
65 |
66 | export default App;
67 |
--------------------------------------------------------------------------------
/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/frontend/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 |
6 | ReactDOM.render(
7 |
8 |
9 | ,
10 | document.getElementById('root')
11 | );
12 |
13 |
--------------------------------------------------------------------------------
/microservices/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amigoscode/kubernetes/2cf15500c6d4ca6c3a280789389791d00bd9c1fb/microservices/.DS_Store
--------------------------------------------------------------------------------
/microservices/customer/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amigoscode/kubernetes/2cf15500c6d4ca6c3a280789389791d00bd9c1fb/microservices/customer/.DS_Store
--------------------------------------------------------------------------------
/microservices/customer/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:alpine
2 |
3 | WORKDIR /src
4 |
5 | COPY package*.json .
6 |
7 | RUN npm install
8 |
9 | COPY . .
10 |
11 | CMD [ "node", "server.js" ]
--------------------------------------------------------------------------------
/microservices/customer/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "node",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "node",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "axios": "^0.21.1",
13 | "cors": "^2.8.5",
14 | "express": "^4.17.1",
15 | "express-actuator": "^1.7.0"
16 | }
17 | },
18 | "node_modules/accepts": {
19 | "version": "1.3.7",
20 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
21 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
22 | "dependencies": {
23 | "mime-types": "~2.1.24",
24 | "negotiator": "0.6.2"
25 | },
26 | "engines": {
27 | "node": ">= 0.6"
28 | }
29 | },
30 | "node_modules/array-flatten": {
31 | "version": "1.1.1",
32 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
33 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
34 | },
35 | "node_modules/axios": {
36 | "version": "0.21.1",
37 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
38 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
39 | "dependencies": {
40 | "follow-redirects": "^1.10.0"
41 | }
42 | },
43 | "node_modules/body-parser": {
44 | "version": "1.19.0",
45 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
46 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
47 | "dependencies": {
48 | "bytes": "3.1.0",
49 | "content-type": "~1.0.4",
50 | "debug": "2.6.9",
51 | "depd": "~1.1.2",
52 | "http-errors": "1.7.2",
53 | "iconv-lite": "0.4.24",
54 | "on-finished": "~2.3.0",
55 | "qs": "6.7.0",
56 | "raw-body": "2.4.0",
57 | "type-is": "~1.6.17"
58 | },
59 | "engines": {
60 | "node": ">= 0.8"
61 | }
62 | },
63 | "node_modules/bytes": {
64 | "version": "3.1.0",
65 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
66 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
67 | "engines": {
68 | "node": ">= 0.8"
69 | }
70 | },
71 | "node_modules/content-disposition": {
72 | "version": "0.5.3",
73 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
74 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
75 | "dependencies": {
76 | "safe-buffer": "5.1.2"
77 | },
78 | "engines": {
79 | "node": ">= 0.6"
80 | }
81 | },
82 | "node_modules/content-type": {
83 | "version": "1.0.4",
84 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
85 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
86 | "engines": {
87 | "node": ">= 0.6"
88 | }
89 | },
90 | "node_modules/cookie": {
91 | "version": "0.4.0",
92 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
93 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
94 | "engines": {
95 | "node": ">= 0.6"
96 | }
97 | },
98 | "node_modules/cookie-signature": {
99 | "version": "1.0.6",
100 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
101 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
102 | },
103 | "node_modules/cors": {
104 | "version": "2.8.5",
105 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
106 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
107 | "dependencies": {
108 | "object-assign": "^4",
109 | "vary": "^1"
110 | },
111 | "engines": {
112 | "node": ">= 0.10"
113 | }
114 | },
115 | "node_modules/debug": {
116 | "version": "2.6.9",
117 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
118 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
119 | "dependencies": {
120 | "ms": "2.0.0"
121 | }
122 | },
123 | "node_modules/depd": {
124 | "version": "1.1.2",
125 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
126 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
127 | "engines": {
128 | "node": ">= 0.6"
129 | }
130 | },
131 | "node_modules/destroy": {
132 | "version": "1.0.4",
133 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
134 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
135 | },
136 | "node_modules/ee-first": {
137 | "version": "1.1.1",
138 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
139 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
140 | },
141 | "node_modules/encodeurl": {
142 | "version": "1.0.2",
143 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
144 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
145 | "engines": {
146 | "node": ">= 0.8"
147 | }
148 | },
149 | "node_modules/escape-html": {
150 | "version": "1.0.3",
151 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
152 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
153 | },
154 | "node_modules/etag": {
155 | "version": "1.8.1",
156 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
157 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
158 | "engines": {
159 | "node": ">= 0.6"
160 | }
161 | },
162 | "node_modules/express": {
163 | "version": "4.17.1",
164 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
165 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
166 | "dependencies": {
167 | "accepts": "~1.3.7",
168 | "array-flatten": "1.1.1",
169 | "body-parser": "1.19.0",
170 | "content-disposition": "0.5.3",
171 | "content-type": "~1.0.4",
172 | "cookie": "0.4.0",
173 | "cookie-signature": "1.0.6",
174 | "debug": "2.6.9",
175 | "depd": "~1.1.2",
176 | "encodeurl": "~1.0.2",
177 | "escape-html": "~1.0.3",
178 | "etag": "~1.8.1",
179 | "finalhandler": "~1.1.2",
180 | "fresh": "0.5.2",
181 | "merge-descriptors": "1.0.1",
182 | "methods": "~1.1.2",
183 | "on-finished": "~2.3.0",
184 | "parseurl": "~1.3.3",
185 | "path-to-regexp": "0.1.7",
186 | "proxy-addr": "~2.0.5",
187 | "qs": "6.7.0",
188 | "range-parser": "~1.2.1",
189 | "safe-buffer": "5.1.2",
190 | "send": "0.17.1",
191 | "serve-static": "1.14.1",
192 | "setprototypeof": "1.1.1",
193 | "statuses": "~1.5.0",
194 | "type-is": "~1.6.18",
195 | "utils-merge": "1.0.1",
196 | "vary": "~1.1.2"
197 | },
198 | "engines": {
199 | "node": ">= 0.10.0"
200 | }
201 | },
202 | "node_modules/express-actuator": {
203 | "version": "1.7.0",
204 | "resolved": "https://registry.npmjs.org/express-actuator/-/express-actuator-1.7.0.tgz",
205 | "integrity": "sha512-w+Bdm0TTZYitISpRrKXvLt454luvYWB9D9MWcYYCLb4JXz5EJcgf3HaHccYNpv4EFfjOzvtt6UXq9n4nYS2HDA==",
206 | "dependencies": {
207 | "express": "^4.17.1",
208 | "moment": "^2.27.0",
209 | "utils-fs-read-properties": "^1.0.0"
210 | },
211 | "engines": {
212 | "node": ">=8.0.0"
213 | }
214 | },
215 | "node_modules/finalhandler": {
216 | "version": "1.1.2",
217 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
218 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
219 | "dependencies": {
220 | "debug": "2.6.9",
221 | "encodeurl": "~1.0.2",
222 | "escape-html": "~1.0.3",
223 | "on-finished": "~2.3.0",
224 | "parseurl": "~1.3.3",
225 | "statuses": "~1.5.0",
226 | "unpipe": "~1.0.0"
227 | },
228 | "engines": {
229 | "node": ">= 0.8"
230 | }
231 | },
232 | "node_modules/follow-redirects": {
233 | "version": "1.14.1",
234 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
235 | "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==",
236 | "funding": [
237 | {
238 | "type": "individual",
239 | "url": "https://github.com/sponsors/RubenVerborgh"
240 | }
241 | ],
242 | "engines": {
243 | "node": ">=4.0"
244 | },
245 | "peerDependenciesMeta": {
246 | "debug": {
247 | "optional": true
248 | }
249 | }
250 | },
251 | "node_modules/forwarded": {
252 | "version": "0.2.0",
253 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
254 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
255 | "engines": {
256 | "node": ">= 0.6"
257 | }
258 | },
259 | "node_modules/fresh": {
260 | "version": "0.5.2",
261 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
262 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
263 | "engines": {
264 | "node": ">= 0.6"
265 | }
266 | },
267 | "node_modules/http-errors": {
268 | "version": "1.7.2",
269 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
270 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
271 | "dependencies": {
272 | "depd": "~1.1.2",
273 | "inherits": "2.0.3",
274 | "setprototypeof": "1.1.1",
275 | "statuses": ">= 1.5.0 < 2",
276 | "toidentifier": "1.0.0"
277 | },
278 | "engines": {
279 | "node": ">= 0.6"
280 | }
281 | },
282 | "node_modules/iconv-lite": {
283 | "version": "0.4.24",
284 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
285 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
286 | "dependencies": {
287 | "safer-buffer": ">= 2.1.2 < 3"
288 | },
289 | "engines": {
290 | "node": ">=0.10.0"
291 | }
292 | },
293 | "node_modules/inherits": {
294 | "version": "2.0.3",
295 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
296 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
297 | },
298 | "node_modules/ipaddr.js": {
299 | "version": "1.9.1",
300 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
301 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
302 | "engines": {
303 | "node": ">= 0.10"
304 | }
305 | },
306 | "node_modules/media-typer": {
307 | "version": "0.3.0",
308 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
309 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
310 | "engines": {
311 | "node": ">= 0.6"
312 | }
313 | },
314 | "node_modules/merge-descriptors": {
315 | "version": "1.0.1",
316 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
317 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
318 | },
319 | "node_modules/methods": {
320 | "version": "1.1.2",
321 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
322 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
323 | "engines": {
324 | "node": ">= 0.6"
325 | }
326 | },
327 | "node_modules/mime": {
328 | "version": "1.6.0",
329 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
330 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
331 | "bin": {
332 | "mime": "cli.js"
333 | },
334 | "engines": {
335 | "node": ">=4"
336 | }
337 | },
338 | "node_modules/mime-db": {
339 | "version": "1.48.0",
340 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
341 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==",
342 | "engines": {
343 | "node": ">= 0.6"
344 | }
345 | },
346 | "node_modules/mime-types": {
347 | "version": "2.1.31",
348 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
349 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
350 | "dependencies": {
351 | "mime-db": "1.48.0"
352 | },
353 | "engines": {
354 | "node": ">= 0.6"
355 | }
356 | },
357 | "node_modules/moment": {
358 | "version": "2.29.1",
359 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
360 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
361 | "engines": {
362 | "node": "*"
363 | }
364 | },
365 | "node_modules/ms": {
366 | "version": "2.0.0",
367 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
368 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
369 | },
370 | "node_modules/negotiator": {
371 | "version": "0.6.2",
372 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
373 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
374 | "engines": {
375 | "node": ">= 0.6"
376 | }
377 | },
378 | "node_modules/object-assign": {
379 | "version": "4.1.1",
380 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
381 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
382 | "engines": {
383 | "node": ">=0.10.0"
384 | }
385 | },
386 | "node_modules/on-finished": {
387 | "version": "2.3.0",
388 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
389 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
390 | "dependencies": {
391 | "ee-first": "1.1.1"
392 | },
393 | "engines": {
394 | "node": ">= 0.8"
395 | }
396 | },
397 | "node_modules/parseurl": {
398 | "version": "1.3.3",
399 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
400 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
401 | "engines": {
402 | "node": ">= 0.8"
403 | }
404 | },
405 | "node_modules/path-to-regexp": {
406 | "version": "0.1.7",
407 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
408 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
409 | },
410 | "node_modules/properties": {
411 | "version": "1.2.1",
412 | "resolved": "https://registry.npmjs.org/properties/-/properties-1.2.1.tgz",
413 | "integrity": "sha1-Dul6f8AgsaKlW4ZZ7aSqjYaQlL0=",
414 | "engines": {
415 | "node": ">=0.10"
416 | }
417 | },
418 | "node_modules/proxy-addr": {
419 | "version": "2.0.7",
420 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
421 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
422 | "dependencies": {
423 | "forwarded": "0.2.0",
424 | "ipaddr.js": "1.9.1"
425 | },
426 | "engines": {
427 | "node": ">= 0.10"
428 | }
429 | },
430 | "node_modules/qs": {
431 | "version": "6.7.0",
432 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
433 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
434 | "engines": {
435 | "node": ">=0.6"
436 | }
437 | },
438 | "node_modules/range-parser": {
439 | "version": "1.2.1",
440 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
441 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
442 | "engines": {
443 | "node": ">= 0.6"
444 | }
445 | },
446 | "node_modules/raw-body": {
447 | "version": "2.4.0",
448 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
449 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
450 | "dependencies": {
451 | "bytes": "3.1.0",
452 | "http-errors": "1.7.2",
453 | "iconv-lite": "0.4.24",
454 | "unpipe": "1.0.0"
455 | },
456 | "engines": {
457 | "node": ">= 0.8"
458 | }
459 | },
460 | "node_modules/safe-buffer": {
461 | "version": "5.1.2",
462 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
463 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
464 | },
465 | "node_modules/safer-buffer": {
466 | "version": "2.1.2",
467 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
468 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
469 | },
470 | "node_modules/send": {
471 | "version": "0.17.1",
472 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
473 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
474 | "dependencies": {
475 | "debug": "2.6.9",
476 | "depd": "~1.1.2",
477 | "destroy": "~1.0.4",
478 | "encodeurl": "~1.0.2",
479 | "escape-html": "~1.0.3",
480 | "etag": "~1.8.1",
481 | "fresh": "0.5.2",
482 | "http-errors": "~1.7.2",
483 | "mime": "1.6.0",
484 | "ms": "2.1.1",
485 | "on-finished": "~2.3.0",
486 | "range-parser": "~1.2.1",
487 | "statuses": "~1.5.0"
488 | },
489 | "engines": {
490 | "node": ">= 0.8.0"
491 | }
492 | },
493 | "node_modules/send/node_modules/ms": {
494 | "version": "2.1.1",
495 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
496 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
497 | },
498 | "node_modules/serve-static": {
499 | "version": "1.14.1",
500 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
501 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
502 | "dependencies": {
503 | "encodeurl": "~1.0.2",
504 | "escape-html": "~1.0.3",
505 | "parseurl": "~1.3.3",
506 | "send": "0.17.1"
507 | },
508 | "engines": {
509 | "node": ">= 0.8.0"
510 | }
511 | },
512 | "node_modules/setprototypeof": {
513 | "version": "1.1.1",
514 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
515 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
516 | },
517 | "node_modules/statuses": {
518 | "version": "1.5.0",
519 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
520 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
521 | "engines": {
522 | "node": ">= 0.6"
523 | }
524 | },
525 | "node_modules/toidentifier": {
526 | "version": "1.0.0",
527 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
528 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
529 | "engines": {
530 | "node": ">=0.6"
531 | }
532 | },
533 | "node_modules/type-is": {
534 | "version": "1.6.18",
535 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
536 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
537 | "dependencies": {
538 | "media-typer": "0.3.0",
539 | "mime-types": "~2.1.24"
540 | },
541 | "engines": {
542 | "node": ">= 0.6"
543 | }
544 | },
545 | "node_modules/unpipe": {
546 | "version": "1.0.0",
547 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
548 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
549 | "engines": {
550 | "node": ">= 0.8"
551 | }
552 | },
553 | "node_modules/utils-fs-read-file": {
554 | "version": "1.0.0",
555 | "resolved": "https://registry.npmjs.org/utils-fs-read-file/-/utils-fs-read-file-1.0.0.tgz",
556 | "integrity": "sha1-i+Ey30ch1pE8bleFq4gOm8I2L6A="
557 | },
558 | "node_modules/utils-fs-read-properties": {
559 | "version": "1.0.0",
560 | "resolved": "https://registry.npmjs.org/utils-fs-read-properties/-/utils-fs-read-properties-1.0.0.tgz",
561 | "integrity": "sha1-zny2sZ9qxg+ugAgWnzMuWMmiSRk=",
562 | "dependencies": {
563 | "properties": "^1.2.1",
564 | "utils-fs-read-file": "^1.0.0",
565 | "utils-properties-parse": "^1.0.0",
566 | "validate.io-string-primitive": "^1.0.0"
567 | }
568 | },
569 | "node_modules/utils-merge": {
570 | "version": "1.0.1",
571 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
572 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
573 | "engines": {
574 | "node": ">= 0.4.0"
575 | }
576 | },
577 | "node_modules/utils-properties-parse": {
578 | "version": "1.0.0",
579 | "resolved": "https://registry.npmjs.org/utils-properties-parse/-/utils-properties-parse-1.0.0.tgz",
580 | "integrity": "sha1-jN8FyvpdGgvcbtrOyRSSqeW3ybQ=",
581 | "dependencies": {
582 | "properties": "1.x.x"
583 | }
584 | },
585 | "node_modules/validate.io-string-primitive": {
586 | "version": "1.0.1",
587 | "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz",
588 | "integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4="
589 | },
590 | "node_modules/vary": {
591 | "version": "1.1.2",
592 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
593 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
594 | "engines": {
595 | "node": ">= 0.8"
596 | }
597 | }
598 | },
599 | "dependencies": {
600 | "accepts": {
601 | "version": "1.3.7",
602 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
603 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
604 | "requires": {
605 | "mime-types": "~2.1.24",
606 | "negotiator": "0.6.2"
607 | }
608 | },
609 | "array-flatten": {
610 | "version": "1.1.1",
611 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
612 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
613 | },
614 | "axios": {
615 | "version": "0.21.1",
616 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
617 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
618 | "requires": {
619 | "follow-redirects": "^1.10.0"
620 | }
621 | },
622 | "body-parser": {
623 | "version": "1.19.0",
624 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
625 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
626 | "requires": {
627 | "bytes": "3.1.0",
628 | "content-type": "~1.0.4",
629 | "debug": "2.6.9",
630 | "depd": "~1.1.2",
631 | "http-errors": "1.7.2",
632 | "iconv-lite": "0.4.24",
633 | "on-finished": "~2.3.0",
634 | "qs": "6.7.0",
635 | "raw-body": "2.4.0",
636 | "type-is": "~1.6.17"
637 | }
638 | },
639 | "bytes": {
640 | "version": "3.1.0",
641 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
642 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
643 | },
644 | "content-disposition": {
645 | "version": "0.5.3",
646 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
647 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
648 | "requires": {
649 | "safe-buffer": "5.1.2"
650 | }
651 | },
652 | "content-type": {
653 | "version": "1.0.4",
654 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
655 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
656 | },
657 | "cookie": {
658 | "version": "0.4.0",
659 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
660 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
661 | },
662 | "cookie-signature": {
663 | "version": "1.0.6",
664 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
665 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
666 | },
667 | "cors": {
668 | "version": "2.8.5",
669 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
670 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
671 | "requires": {
672 | "object-assign": "^4",
673 | "vary": "^1"
674 | }
675 | },
676 | "debug": {
677 | "version": "2.6.9",
678 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
679 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
680 | "requires": {
681 | "ms": "2.0.0"
682 | }
683 | },
684 | "depd": {
685 | "version": "1.1.2",
686 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
687 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
688 | },
689 | "destroy": {
690 | "version": "1.0.4",
691 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
692 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
693 | },
694 | "ee-first": {
695 | "version": "1.1.1",
696 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
697 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
698 | },
699 | "encodeurl": {
700 | "version": "1.0.2",
701 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
702 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
703 | },
704 | "escape-html": {
705 | "version": "1.0.3",
706 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
707 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
708 | },
709 | "etag": {
710 | "version": "1.8.1",
711 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
712 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
713 | },
714 | "express": {
715 | "version": "4.17.1",
716 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
717 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
718 | "requires": {
719 | "accepts": "~1.3.7",
720 | "array-flatten": "1.1.1",
721 | "body-parser": "1.19.0",
722 | "content-disposition": "0.5.3",
723 | "content-type": "~1.0.4",
724 | "cookie": "0.4.0",
725 | "cookie-signature": "1.0.6",
726 | "debug": "2.6.9",
727 | "depd": "~1.1.2",
728 | "encodeurl": "~1.0.2",
729 | "escape-html": "~1.0.3",
730 | "etag": "~1.8.1",
731 | "finalhandler": "~1.1.2",
732 | "fresh": "0.5.2",
733 | "merge-descriptors": "1.0.1",
734 | "methods": "~1.1.2",
735 | "on-finished": "~2.3.0",
736 | "parseurl": "~1.3.3",
737 | "path-to-regexp": "0.1.7",
738 | "proxy-addr": "~2.0.5",
739 | "qs": "6.7.0",
740 | "range-parser": "~1.2.1",
741 | "safe-buffer": "5.1.2",
742 | "send": "0.17.1",
743 | "serve-static": "1.14.1",
744 | "setprototypeof": "1.1.1",
745 | "statuses": "~1.5.0",
746 | "type-is": "~1.6.18",
747 | "utils-merge": "1.0.1",
748 | "vary": "~1.1.2"
749 | }
750 | },
751 | "express-actuator": {
752 | "version": "1.7.0",
753 | "resolved": "https://registry.npmjs.org/express-actuator/-/express-actuator-1.7.0.tgz",
754 | "integrity": "sha512-w+Bdm0TTZYitISpRrKXvLt454luvYWB9D9MWcYYCLb4JXz5EJcgf3HaHccYNpv4EFfjOzvtt6UXq9n4nYS2HDA==",
755 | "requires": {
756 | "express": "^4.17.1",
757 | "moment": "^2.27.0",
758 | "utils-fs-read-properties": "^1.0.0"
759 | }
760 | },
761 | "finalhandler": {
762 | "version": "1.1.2",
763 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
764 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
765 | "requires": {
766 | "debug": "2.6.9",
767 | "encodeurl": "~1.0.2",
768 | "escape-html": "~1.0.3",
769 | "on-finished": "~2.3.0",
770 | "parseurl": "~1.3.3",
771 | "statuses": "~1.5.0",
772 | "unpipe": "~1.0.0"
773 | }
774 | },
775 | "follow-redirects": {
776 | "version": "1.14.1",
777 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
778 | "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg=="
779 | },
780 | "forwarded": {
781 | "version": "0.2.0",
782 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
783 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
784 | },
785 | "fresh": {
786 | "version": "0.5.2",
787 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
788 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
789 | },
790 | "http-errors": {
791 | "version": "1.7.2",
792 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
793 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
794 | "requires": {
795 | "depd": "~1.1.2",
796 | "inherits": "2.0.3",
797 | "setprototypeof": "1.1.1",
798 | "statuses": ">= 1.5.0 < 2",
799 | "toidentifier": "1.0.0"
800 | }
801 | },
802 | "iconv-lite": {
803 | "version": "0.4.24",
804 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
805 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
806 | "requires": {
807 | "safer-buffer": ">= 2.1.2 < 3"
808 | }
809 | },
810 | "inherits": {
811 | "version": "2.0.3",
812 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
813 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
814 | },
815 | "ipaddr.js": {
816 | "version": "1.9.1",
817 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
818 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
819 | },
820 | "media-typer": {
821 | "version": "0.3.0",
822 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
823 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
824 | },
825 | "merge-descriptors": {
826 | "version": "1.0.1",
827 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
828 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
829 | },
830 | "methods": {
831 | "version": "1.1.2",
832 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
833 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
834 | },
835 | "mime": {
836 | "version": "1.6.0",
837 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
838 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
839 | },
840 | "mime-db": {
841 | "version": "1.48.0",
842 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
843 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ=="
844 | },
845 | "mime-types": {
846 | "version": "2.1.31",
847 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
848 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
849 | "requires": {
850 | "mime-db": "1.48.0"
851 | }
852 | },
853 | "moment": {
854 | "version": "2.29.1",
855 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
856 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
857 | },
858 | "ms": {
859 | "version": "2.0.0",
860 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
861 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
862 | },
863 | "negotiator": {
864 | "version": "0.6.2",
865 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
866 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
867 | },
868 | "object-assign": {
869 | "version": "4.1.1",
870 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
871 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
872 | },
873 | "on-finished": {
874 | "version": "2.3.0",
875 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
876 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
877 | "requires": {
878 | "ee-first": "1.1.1"
879 | }
880 | },
881 | "parseurl": {
882 | "version": "1.3.3",
883 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
884 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
885 | },
886 | "path-to-regexp": {
887 | "version": "0.1.7",
888 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
889 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
890 | },
891 | "properties": {
892 | "version": "1.2.1",
893 | "resolved": "https://registry.npmjs.org/properties/-/properties-1.2.1.tgz",
894 | "integrity": "sha1-Dul6f8AgsaKlW4ZZ7aSqjYaQlL0="
895 | },
896 | "proxy-addr": {
897 | "version": "2.0.7",
898 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
899 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
900 | "requires": {
901 | "forwarded": "0.2.0",
902 | "ipaddr.js": "1.9.1"
903 | }
904 | },
905 | "qs": {
906 | "version": "6.7.0",
907 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
908 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
909 | },
910 | "range-parser": {
911 | "version": "1.2.1",
912 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
913 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
914 | },
915 | "raw-body": {
916 | "version": "2.4.0",
917 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
918 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
919 | "requires": {
920 | "bytes": "3.1.0",
921 | "http-errors": "1.7.2",
922 | "iconv-lite": "0.4.24",
923 | "unpipe": "1.0.0"
924 | }
925 | },
926 | "safe-buffer": {
927 | "version": "5.1.2",
928 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
929 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
930 | },
931 | "safer-buffer": {
932 | "version": "2.1.2",
933 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
934 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
935 | },
936 | "send": {
937 | "version": "0.17.1",
938 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
939 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
940 | "requires": {
941 | "debug": "2.6.9",
942 | "depd": "~1.1.2",
943 | "destroy": "~1.0.4",
944 | "encodeurl": "~1.0.2",
945 | "escape-html": "~1.0.3",
946 | "etag": "~1.8.1",
947 | "fresh": "0.5.2",
948 | "http-errors": "~1.7.2",
949 | "mime": "1.6.0",
950 | "ms": "2.1.1",
951 | "on-finished": "~2.3.0",
952 | "range-parser": "~1.2.1",
953 | "statuses": "~1.5.0"
954 | },
955 | "dependencies": {
956 | "ms": {
957 | "version": "2.1.1",
958 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
959 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
960 | }
961 | }
962 | },
963 | "serve-static": {
964 | "version": "1.14.1",
965 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
966 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
967 | "requires": {
968 | "encodeurl": "~1.0.2",
969 | "escape-html": "~1.0.3",
970 | "parseurl": "~1.3.3",
971 | "send": "0.17.1"
972 | }
973 | },
974 | "setprototypeof": {
975 | "version": "1.1.1",
976 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
977 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
978 | },
979 | "statuses": {
980 | "version": "1.5.0",
981 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
982 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
983 | },
984 | "toidentifier": {
985 | "version": "1.0.0",
986 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
987 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
988 | },
989 | "type-is": {
990 | "version": "1.6.18",
991 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
992 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
993 | "requires": {
994 | "media-typer": "0.3.0",
995 | "mime-types": "~2.1.24"
996 | }
997 | },
998 | "unpipe": {
999 | "version": "1.0.0",
1000 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1001 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1002 | },
1003 | "utils-fs-read-file": {
1004 | "version": "1.0.0",
1005 | "resolved": "https://registry.npmjs.org/utils-fs-read-file/-/utils-fs-read-file-1.0.0.tgz",
1006 | "integrity": "sha1-i+Ey30ch1pE8bleFq4gOm8I2L6A="
1007 | },
1008 | "utils-fs-read-properties": {
1009 | "version": "1.0.0",
1010 | "resolved": "https://registry.npmjs.org/utils-fs-read-properties/-/utils-fs-read-properties-1.0.0.tgz",
1011 | "integrity": "sha1-zny2sZ9qxg+ugAgWnzMuWMmiSRk=",
1012 | "requires": {
1013 | "properties": "^1.2.1",
1014 | "utils-fs-read-file": "^1.0.0",
1015 | "utils-properties-parse": "^1.0.0",
1016 | "validate.io-string-primitive": "^1.0.0"
1017 | }
1018 | },
1019 | "utils-merge": {
1020 | "version": "1.0.1",
1021 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1022 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1023 | },
1024 | "utils-properties-parse": {
1025 | "version": "1.0.0",
1026 | "resolved": "https://registry.npmjs.org/utils-properties-parse/-/utils-properties-parse-1.0.0.tgz",
1027 | "integrity": "sha1-jN8FyvpdGgvcbtrOyRSSqeW3ybQ=",
1028 | "requires": {
1029 | "properties": "1.x.x"
1030 | }
1031 | },
1032 | "validate.io-string-primitive": {
1033 | "version": "1.0.1",
1034 | "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz",
1035 | "integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4="
1036 | },
1037 | "vary": {
1038 | "version": "1.1.2",
1039 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1040 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1041 | }
1042 | }
1043 | }
1044 |
--------------------------------------------------------------------------------
/microservices/customer/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "node",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "server.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "node server.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "axios": "^0.21.1",
15 | "cors": "^2.8.5",
16 | "express": "^4.17.1",
17 | "express-actuator": "^1.7.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/microservices/customer/server.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const actuator = require('express-actuator')
3 | const app = express();
4 | const cors = require('cors')
5 | const axios = require("axios")
6 |
7 | const PORT = process.env.PORT || 8080;
8 | const KILL_IN_SECONDS = process.env.KILL_IN_SECONDS
9 | const ORDER_SERVICE = process.env.ORDER_SERVICE || "localhost:8081"
10 | const APP_NAME = process.env.APP_NAME
11 |
12 |
13 | const customers = [
14 | {id: 1, name: 'James', address: 'UK', gender: 'M'},
15 | {id: 2, name: 'Jamila', address: 'US', gender: 'F'},
16 | {id: 3, name: 'Bilal', address: 'ES', gender: 'M'}
17 | ];
18 |
19 | var router = express.Router();
20 |
21 | app.use(actuator())
22 | app.use(cors())
23 |
24 | router.get('/api/v1/customer', function(req, res) {
25 | res.json(customers);
26 | });
27 |
28 | router.get('/api/v1/customer/:id/orders', function(req, res) {
29 | const url = `http://${ORDER_SERVICE}/api/v1/order/customer/${req.params.id}`
30 | axios.get(url)
31 | .then(response => {
32 | res.json(response.data);
33 | })
34 | .catch(error => {
35 | res.status(500).json({
36 | error
37 | });
38 | });
39 | });
40 |
41 | app.use('/', router);
42 |
43 | app.listen(PORT, () => {
44 | console.log(`${APP_NAME || ""} Server Running on PORT ${PORT}`);
45 | if (KILL_IN_SECONDS) {
46 | console.log(`server will die in ${KILL_IN_SECONDS} seconds`)
47 | setTimeout(() => {
48 | process.exit(1);
49 | }, KILL_IN_SECONDS * 1000);
50 | }
51 | });
--------------------------------------------------------------------------------
/microservices/order/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amigoscode/kubernetes/2cf15500c6d4ca6c3a280789389791d00bd9c1fb/microservices/order/.DS_Store
--------------------------------------------------------------------------------
/microservices/order/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:alpine
2 |
3 | WORKDIR /src
4 |
5 | COPY package*.json .
6 |
7 | RUN npm install
8 |
9 | COPY . .
10 |
11 | CMD [ "node", "server.js" ]
--------------------------------------------------------------------------------
/microservices/order/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "node",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "node",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "axios": "^0.21.1",
13 | "express": "^4.17.1",
14 | "express-actuator": "^1.7.0"
15 | }
16 | },
17 | "node_modules/accepts": {
18 | "version": "1.3.7",
19 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
20 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
21 | "dependencies": {
22 | "mime-types": "~2.1.24",
23 | "negotiator": "0.6.2"
24 | },
25 | "engines": {
26 | "node": ">= 0.6"
27 | }
28 | },
29 | "node_modules/array-flatten": {
30 | "version": "1.1.1",
31 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
32 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
33 | },
34 | "node_modules/axios": {
35 | "version": "0.21.1",
36 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
37 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
38 | "dependencies": {
39 | "follow-redirects": "^1.10.0"
40 | }
41 | },
42 | "node_modules/body-parser": {
43 | "version": "1.19.0",
44 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
45 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
46 | "dependencies": {
47 | "bytes": "3.1.0",
48 | "content-type": "~1.0.4",
49 | "debug": "2.6.9",
50 | "depd": "~1.1.2",
51 | "http-errors": "1.7.2",
52 | "iconv-lite": "0.4.24",
53 | "on-finished": "~2.3.0",
54 | "qs": "6.7.0",
55 | "raw-body": "2.4.0",
56 | "type-is": "~1.6.17"
57 | },
58 | "engines": {
59 | "node": ">= 0.8"
60 | }
61 | },
62 | "node_modules/bytes": {
63 | "version": "3.1.0",
64 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
65 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
66 | "engines": {
67 | "node": ">= 0.8"
68 | }
69 | },
70 | "node_modules/content-disposition": {
71 | "version": "0.5.3",
72 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
73 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
74 | "dependencies": {
75 | "safe-buffer": "5.1.2"
76 | },
77 | "engines": {
78 | "node": ">= 0.6"
79 | }
80 | },
81 | "node_modules/content-type": {
82 | "version": "1.0.4",
83 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
84 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
85 | "engines": {
86 | "node": ">= 0.6"
87 | }
88 | },
89 | "node_modules/cookie": {
90 | "version": "0.4.0",
91 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
92 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
93 | "engines": {
94 | "node": ">= 0.6"
95 | }
96 | },
97 | "node_modules/cookie-signature": {
98 | "version": "1.0.6",
99 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
100 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
101 | },
102 | "node_modules/debug": {
103 | "version": "2.6.9",
104 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
105 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
106 | "dependencies": {
107 | "ms": "2.0.0"
108 | }
109 | },
110 | "node_modules/depd": {
111 | "version": "1.1.2",
112 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
113 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
114 | "engines": {
115 | "node": ">= 0.6"
116 | }
117 | },
118 | "node_modules/destroy": {
119 | "version": "1.0.4",
120 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
121 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
122 | },
123 | "node_modules/ee-first": {
124 | "version": "1.1.1",
125 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
126 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
127 | },
128 | "node_modules/encodeurl": {
129 | "version": "1.0.2",
130 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
131 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
132 | "engines": {
133 | "node": ">= 0.8"
134 | }
135 | },
136 | "node_modules/escape-html": {
137 | "version": "1.0.3",
138 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
139 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
140 | },
141 | "node_modules/etag": {
142 | "version": "1.8.1",
143 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
144 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
145 | "engines": {
146 | "node": ">= 0.6"
147 | }
148 | },
149 | "node_modules/express": {
150 | "version": "4.17.1",
151 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
152 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
153 | "dependencies": {
154 | "accepts": "~1.3.7",
155 | "array-flatten": "1.1.1",
156 | "body-parser": "1.19.0",
157 | "content-disposition": "0.5.3",
158 | "content-type": "~1.0.4",
159 | "cookie": "0.4.0",
160 | "cookie-signature": "1.0.6",
161 | "debug": "2.6.9",
162 | "depd": "~1.1.2",
163 | "encodeurl": "~1.0.2",
164 | "escape-html": "~1.0.3",
165 | "etag": "~1.8.1",
166 | "finalhandler": "~1.1.2",
167 | "fresh": "0.5.2",
168 | "merge-descriptors": "1.0.1",
169 | "methods": "~1.1.2",
170 | "on-finished": "~2.3.0",
171 | "parseurl": "~1.3.3",
172 | "path-to-regexp": "0.1.7",
173 | "proxy-addr": "~2.0.5",
174 | "qs": "6.7.0",
175 | "range-parser": "~1.2.1",
176 | "safe-buffer": "5.1.2",
177 | "send": "0.17.1",
178 | "serve-static": "1.14.1",
179 | "setprototypeof": "1.1.1",
180 | "statuses": "~1.5.0",
181 | "type-is": "~1.6.18",
182 | "utils-merge": "1.0.1",
183 | "vary": "~1.1.2"
184 | },
185 | "engines": {
186 | "node": ">= 0.10.0"
187 | }
188 | },
189 | "node_modules/express-actuator": {
190 | "version": "1.7.0",
191 | "resolved": "https://registry.npmjs.org/express-actuator/-/express-actuator-1.7.0.tgz",
192 | "integrity": "sha512-w+Bdm0TTZYitISpRrKXvLt454luvYWB9D9MWcYYCLb4JXz5EJcgf3HaHccYNpv4EFfjOzvtt6UXq9n4nYS2HDA==",
193 | "dependencies": {
194 | "express": "^4.17.1",
195 | "moment": "^2.27.0",
196 | "utils-fs-read-properties": "^1.0.0"
197 | },
198 | "engines": {
199 | "node": ">=8.0.0"
200 | }
201 | },
202 | "node_modules/finalhandler": {
203 | "version": "1.1.2",
204 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
205 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
206 | "dependencies": {
207 | "debug": "2.6.9",
208 | "encodeurl": "~1.0.2",
209 | "escape-html": "~1.0.3",
210 | "on-finished": "~2.3.0",
211 | "parseurl": "~1.3.3",
212 | "statuses": "~1.5.0",
213 | "unpipe": "~1.0.0"
214 | },
215 | "engines": {
216 | "node": ">= 0.8"
217 | }
218 | },
219 | "node_modules/follow-redirects": {
220 | "version": "1.14.1",
221 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
222 | "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==",
223 | "funding": [
224 | {
225 | "type": "individual",
226 | "url": "https://github.com/sponsors/RubenVerborgh"
227 | }
228 | ],
229 | "engines": {
230 | "node": ">=4.0"
231 | },
232 | "peerDependenciesMeta": {
233 | "debug": {
234 | "optional": true
235 | }
236 | }
237 | },
238 | "node_modules/forwarded": {
239 | "version": "0.2.0",
240 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
241 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
242 | "engines": {
243 | "node": ">= 0.6"
244 | }
245 | },
246 | "node_modules/fresh": {
247 | "version": "0.5.2",
248 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
249 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
250 | "engines": {
251 | "node": ">= 0.6"
252 | }
253 | },
254 | "node_modules/http-errors": {
255 | "version": "1.7.2",
256 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
257 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
258 | "dependencies": {
259 | "depd": "~1.1.2",
260 | "inherits": "2.0.3",
261 | "setprototypeof": "1.1.1",
262 | "statuses": ">= 1.5.0 < 2",
263 | "toidentifier": "1.0.0"
264 | },
265 | "engines": {
266 | "node": ">= 0.6"
267 | }
268 | },
269 | "node_modules/iconv-lite": {
270 | "version": "0.4.24",
271 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
272 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
273 | "dependencies": {
274 | "safer-buffer": ">= 2.1.2 < 3"
275 | },
276 | "engines": {
277 | "node": ">=0.10.0"
278 | }
279 | },
280 | "node_modules/inherits": {
281 | "version": "2.0.3",
282 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
283 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
284 | },
285 | "node_modules/ipaddr.js": {
286 | "version": "1.9.1",
287 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
288 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
289 | "engines": {
290 | "node": ">= 0.10"
291 | }
292 | },
293 | "node_modules/media-typer": {
294 | "version": "0.3.0",
295 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
296 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
297 | "engines": {
298 | "node": ">= 0.6"
299 | }
300 | },
301 | "node_modules/merge-descriptors": {
302 | "version": "1.0.1",
303 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
304 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
305 | },
306 | "node_modules/methods": {
307 | "version": "1.1.2",
308 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
309 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
310 | "engines": {
311 | "node": ">= 0.6"
312 | }
313 | },
314 | "node_modules/mime": {
315 | "version": "1.6.0",
316 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
317 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
318 | "bin": {
319 | "mime": "cli.js"
320 | },
321 | "engines": {
322 | "node": ">=4"
323 | }
324 | },
325 | "node_modules/mime-db": {
326 | "version": "1.48.0",
327 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
328 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==",
329 | "engines": {
330 | "node": ">= 0.6"
331 | }
332 | },
333 | "node_modules/mime-types": {
334 | "version": "2.1.31",
335 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
336 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
337 | "dependencies": {
338 | "mime-db": "1.48.0"
339 | },
340 | "engines": {
341 | "node": ">= 0.6"
342 | }
343 | },
344 | "node_modules/moment": {
345 | "version": "2.29.1",
346 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
347 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
348 | "engines": {
349 | "node": "*"
350 | }
351 | },
352 | "node_modules/ms": {
353 | "version": "2.0.0",
354 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
355 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
356 | },
357 | "node_modules/negotiator": {
358 | "version": "0.6.2",
359 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
360 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
361 | "engines": {
362 | "node": ">= 0.6"
363 | }
364 | },
365 | "node_modules/on-finished": {
366 | "version": "2.3.0",
367 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
368 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
369 | "dependencies": {
370 | "ee-first": "1.1.1"
371 | },
372 | "engines": {
373 | "node": ">= 0.8"
374 | }
375 | },
376 | "node_modules/parseurl": {
377 | "version": "1.3.3",
378 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
379 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
380 | "engines": {
381 | "node": ">= 0.8"
382 | }
383 | },
384 | "node_modules/path-to-regexp": {
385 | "version": "0.1.7",
386 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
387 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
388 | },
389 | "node_modules/properties": {
390 | "version": "1.2.1",
391 | "resolved": "https://registry.npmjs.org/properties/-/properties-1.2.1.tgz",
392 | "integrity": "sha1-Dul6f8AgsaKlW4ZZ7aSqjYaQlL0=",
393 | "engines": {
394 | "node": ">=0.10"
395 | }
396 | },
397 | "node_modules/proxy-addr": {
398 | "version": "2.0.7",
399 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
400 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
401 | "dependencies": {
402 | "forwarded": "0.2.0",
403 | "ipaddr.js": "1.9.1"
404 | },
405 | "engines": {
406 | "node": ">= 0.10"
407 | }
408 | },
409 | "node_modules/qs": {
410 | "version": "6.7.0",
411 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
412 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
413 | "engines": {
414 | "node": ">=0.6"
415 | }
416 | },
417 | "node_modules/range-parser": {
418 | "version": "1.2.1",
419 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
420 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
421 | "engines": {
422 | "node": ">= 0.6"
423 | }
424 | },
425 | "node_modules/raw-body": {
426 | "version": "2.4.0",
427 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
428 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
429 | "dependencies": {
430 | "bytes": "3.1.0",
431 | "http-errors": "1.7.2",
432 | "iconv-lite": "0.4.24",
433 | "unpipe": "1.0.0"
434 | },
435 | "engines": {
436 | "node": ">= 0.8"
437 | }
438 | },
439 | "node_modules/safe-buffer": {
440 | "version": "5.1.2",
441 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
442 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
443 | },
444 | "node_modules/safer-buffer": {
445 | "version": "2.1.2",
446 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
447 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
448 | },
449 | "node_modules/send": {
450 | "version": "0.17.1",
451 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
452 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
453 | "dependencies": {
454 | "debug": "2.6.9",
455 | "depd": "~1.1.2",
456 | "destroy": "~1.0.4",
457 | "encodeurl": "~1.0.2",
458 | "escape-html": "~1.0.3",
459 | "etag": "~1.8.1",
460 | "fresh": "0.5.2",
461 | "http-errors": "~1.7.2",
462 | "mime": "1.6.0",
463 | "ms": "2.1.1",
464 | "on-finished": "~2.3.0",
465 | "range-parser": "~1.2.1",
466 | "statuses": "~1.5.0"
467 | },
468 | "engines": {
469 | "node": ">= 0.8.0"
470 | }
471 | },
472 | "node_modules/send/node_modules/ms": {
473 | "version": "2.1.1",
474 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
475 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
476 | },
477 | "node_modules/serve-static": {
478 | "version": "1.14.1",
479 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
480 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
481 | "dependencies": {
482 | "encodeurl": "~1.0.2",
483 | "escape-html": "~1.0.3",
484 | "parseurl": "~1.3.3",
485 | "send": "0.17.1"
486 | },
487 | "engines": {
488 | "node": ">= 0.8.0"
489 | }
490 | },
491 | "node_modules/setprototypeof": {
492 | "version": "1.1.1",
493 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
494 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
495 | },
496 | "node_modules/statuses": {
497 | "version": "1.5.0",
498 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
499 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
500 | "engines": {
501 | "node": ">= 0.6"
502 | }
503 | },
504 | "node_modules/toidentifier": {
505 | "version": "1.0.0",
506 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
507 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
508 | "engines": {
509 | "node": ">=0.6"
510 | }
511 | },
512 | "node_modules/type-is": {
513 | "version": "1.6.18",
514 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
515 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
516 | "dependencies": {
517 | "media-typer": "0.3.0",
518 | "mime-types": "~2.1.24"
519 | },
520 | "engines": {
521 | "node": ">= 0.6"
522 | }
523 | },
524 | "node_modules/unpipe": {
525 | "version": "1.0.0",
526 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
527 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
528 | "engines": {
529 | "node": ">= 0.8"
530 | }
531 | },
532 | "node_modules/utils-fs-read-file": {
533 | "version": "1.0.0",
534 | "resolved": "https://registry.npmjs.org/utils-fs-read-file/-/utils-fs-read-file-1.0.0.tgz",
535 | "integrity": "sha1-i+Ey30ch1pE8bleFq4gOm8I2L6A="
536 | },
537 | "node_modules/utils-fs-read-properties": {
538 | "version": "1.0.0",
539 | "resolved": "https://registry.npmjs.org/utils-fs-read-properties/-/utils-fs-read-properties-1.0.0.tgz",
540 | "integrity": "sha1-zny2sZ9qxg+ugAgWnzMuWMmiSRk=",
541 | "dependencies": {
542 | "properties": "^1.2.1",
543 | "utils-fs-read-file": "^1.0.0",
544 | "utils-properties-parse": "^1.0.0",
545 | "validate.io-string-primitive": "^1.0.0"
546 | }
547 | },
548 | "node_modules/utils-merge": {
549 | "version": "1.0.1",
550 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
551 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
552 | "engines": {
553 | "node": ">= 0.4.0"
554 | }
555 | },
556 | "node_modules/utils-properties-parse": {
557 | "version": "1.0.0",
558 | "resolved": "https://registry.npmjs.org/utils-properties-parse/-/utils-properties-parse-1.0.0.tgz",
559 | "integrity": "sha1-jN8FyvpdGgvcbtrOyRSSqeW3ybQ=",
560 | "dependencies": {
561 | "properties": "1.x.x"
562 | }
563 | },
564 | "node_modules/validate.io-string-primitive": {
565 | "version": "1.0.1",
566 | "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz",
567 | "integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4="
568 | },
569 | "node_modules/vary": {
570 | "version": "1.1.2",
571 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
572 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
573 | "engines": {
574 | "node": ">= 0.8"
575 | }
576 | }
577 | },
578 | "dependencies": {
579 | "accepts": {
580 | "version": "1.3.7",
581 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
582 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
583 | "requires": {
584 | "mime-types": "~2.1.24",
585 | "negotiator": "0.6.2"
586 | }
587 | },
588 | "array-flatten": {
589 | "version": "1.1.1",
590 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
591 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
592 | },
593 | "axios": {
594 | "version": "0.21.1",
595 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
596 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
597 | "requires": {
598 | "follow-redirects": "^1.10.0"
599 | }
600 | },
601 | "body-parser": {
602 | "version": "1.19.0",
603 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
604 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
605 | "requires": {
606 | "bytes": "3.1.0",
607 | "content-type": "~1.0.4",
608 | "debug": "2.6.9",
609 | "depd": "~1.1.2",
610 | "http-errors": "1.7.2",
611 | "iconv-lite": "0.4.24",
612 | "on-finished": "~2.3.0",
613 | "qs": "6.7.0",
614 | "raw-body": "2.4.0",
615 | "type-is": "~1.6.17"
616 | }
617 | },
618 | "bytes": {
619 | "version": "3.1.0",
620 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
621 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
622 | },
623 | "content-disposition": {
624 | "version": "0.5.3",
625 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
626 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
627 | "requires": {
628 | "safe-buffer": "5.1.2"
629 | }
630 | },
631 | "content-type": {
632 | "version": "1.0.4",
633 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
634 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
635 | },
636 | "cookie": {
637 | "version": "0.4.0",
638 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
639 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
640 | },
641 | "cookie-signature": {
642 | "version": "1.0.6",
643 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
644 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
645 | },
646 | "debug": {
647 | "version": "2.6.9",
648 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
649 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
650 | "requires": {
651 | "ms": "2.0.0"
652 | }
653 | },
654 | "depd": {
655 | "version": "1.1.2",
656 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
657 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
658 | },
659 | "destroy": {
660 | "version": "1.0.4",
661 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
662 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
663 | },
664 | "ee-first": {
665 | "version": "1.1.1",
666 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
667 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
668 | },
669 | "encodeurl": {
670 | "version": "1.0.2",
671 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
672 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
673 | },
674 | "escape-html": {
675 | "version": "1.0.3",
676 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
677 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
678 | },
679 | "etag": {
680 | "version": "1.8.1",
681 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
682 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
683 | },
684 | "express": {
685 | "version": "4.17.1",
686 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
687 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
688 | "requires": {
689 | "accepts": "~1.3.7",
690 | "array-flatten": "1.1.1",
691 | "body-parser": "1.19.0",
692 | "content-disposition": "0.5.3",
693 | "content-type": "~1.0.4",
694 | "cookie": "0.4.0",
695 | "cookie-signature": "1.0.6",
696 | "debug": "2.6.9",
697 | "depd": "~1.1.2",
698 | "encodeurl": "~1.0.2",
699 | "escape-html": "~1.0.3",
700 | "etag": "~1.8.1",
701 | "finalhandler": "~1.1.2",
702 | "fresh": "0.5.2",
703 | "merge-descriptors": "1.0.1",
704 | "methods": "~1.1.2",
705 | "on-finished": "~2.3.0",
706 | "parseurl": "~1.3.3",
707 | "path-to-regexp": "0.1.7",
708 | "proxy-addr": "~2.0.5",
709 | "qs": "6.7.0",
710 | "range-parser": "~1.2.1",
711 | "safe-buffer": "5.1.2",
712 | "send": "0.17.1",
713 | "serve-static": "1.14.1",
714 | "setprototypeof": "1.1.1",
715 | "statuses": "~1.5.0",
716 | "type-is": "~1.6.18",
717 | "utils-merge": "1.0.1",
718 | "vary": "~1.1.2"
719 | }
720 | },
721 | "express-actuator": {
722 | "version": "1.7.0",
723 | "resolved": "https://registry.npmjs.org/express-actuator/-/express-actuator-1.7.0.tgz",
724 | "integrity": "sha512-w+Bdm0TTZYitISpRrKXvLt454luvYWB9D9MWcYYCLb4JXz5EJcgf3HaHccYNpv4EFfjOzvtt6UXq9n4nYS2HDA==",
725 | "requires": {
726 | "express": "^4.17.1",
727 | "moment": "^2.27.0",
728 | "utils-fs-read-properties": "^1.0.0"
729 | }
730 | },
731 | "finalhandler": {
732 | "version": "1.1.2",
733 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
734 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
735 | "requires": {
736 | "debug": "2.6.9",
737 | "encodeurl": "~1.0.2",
738 | "escape-html": "~1.0.3",
739 | "on-finished": "~2.3.0",
740 | "parseurl": "~1.3.3",
741 | "statuses": "~1.5.0",
742 | "unpipe": "~1.0.0"
743 | }
744 | },
745 | "follow-redirects": {
746 | "version": "1.14.1",
747 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
748 | "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg=="
749 | },
750 | "forwarded": {
751 | "version": "0.2.0",
752 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
753 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
754 | },
755 | "fresh": {
756 | "version": "0.5.2",
757 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
758 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
759 | },
760 | "http-errors": {
761 | "version": "1.7.2",
762 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
763 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
764 | "requires": {
765 | "depd": "~1.1.2",
766 | "inherits": "2.0.3",
767 | "setprototypeof": "1.1.1",
768 | "statuses": ">= 1.5.0 < 2",
769 | "toidentifier": "1.0.0"
770 | }
771 | },
772 | "iconv-lite": {
773 | "version": "0.4.24",
774 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
775 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
776 | "requires": {
777 | "safer-buffer": ">= 2.1.2 < 3"
778 | }
779 | },
780 | "inherits": {
781 | "version": "2.0.3",
782 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
783 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
784 | },
785 | "ipaddr.js": {
786 | "version": "1.9.1",
787 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
788 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
789 | },
790 | "media-typer": {
791 | "version": "0.3.0",
792 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
793 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
794 | },
795 | "merge-descriptors": {
796 | "version": "1.0.1",
797 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
798 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
799 | },
800 | "methods": {
801 | "version": "1.1.2",
802 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
803 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
804 | },
805 | "mime": {
806 | "version": "1.6.0",
807 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
808 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
809 | },
810 | "mime-db": {
811 | "version": "1.48.0",
812 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
813 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ=="
814 | },
815 | "mime-types": {
816 | "version": "2.1.31",
817 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
818 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
819 | "requires": {
820 | "mime-db": "1.48.0"
821 | }
822 | },
823 | "moment": {
824 | "version": "2.29.1",
825 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
826 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
827 | },
828 | "ms": {
829 | "version": "2.0.0",
830 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
831 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
832 | },
833 | "negotiator": {
834 | "version": "0.6.2",
835 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
836 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
837 | },
838 | "on-finished": {
839 | "version": "2.3.0",
840 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
841 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
842 | "requires": {
843 | "ee-first": "1.1.1"
844 | }
845 | },
846 | "parseurl": {
847 | "version": "1.3.3",
848 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
849 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
850 | },
851 | "path-to-regexp": {
852 | "version": "0.1.7",
853 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
854 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
855 | },
856 | "properties": {
857 | "version": "1.2.1",
858 | "resolved": "https://registry.npmjs.org/properties/-/properties-1.2.1.tgz",
859 | "integrity": "sha1-Dul6f8AgsaKlW4ZZ7aSqjYaQlL0="
860 | },
861 | "proxy-addr": {
862 | "version": "2.0.7",
863 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
864 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
865 | "requires": {
866 | "forwarded": "0.2.0",
867 | "ipaddr.js": "1.9.1"
868 | }
869 | },
870 | "qs": {
871 | "version": "6.7.0",
872 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
873 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
874 | },
875 | "range-parser": {
876 | "version": "1.2.1",
877 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
878 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
879 | },
880 | "raw-body": {
881 | "version": "2.4.0",
882 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
883 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
884 | "requires": {
885 | "bytes": "3.1.0",
886 | "http-errors": "1.7.2",
887 | "iconv-lite": "0.4.24",
888 | "unpipe": "1.0.0"
889 | }
890 | },
891 | "safe-buffer": {
892 | "version": "5.1.2",
893 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
894 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
895 | },
896 | "safer-buffer": {
897 | "version": "2.1.2",
898 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
899 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
900 | },
901 | "send": {
902 | "version": "0.17.1",
903 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
904 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
905 | "requires": {
906 | "debug": "2.6.9",
907 | "depd": "~1.1.2",
908 | "destroy": "~1.0.4",
909 | "encodeurl": "~1.0.2",
910 | "escape-html": "~1.0.3",
911 | "etag": "~1.8.1",
912 | "fresh": "0.5.2",
913 | "http-errors": "~1.7.2",
914 | "mime": "1.6.0",
915 | "ms": "2.1.1",
916 | "on-finished": "~2.3.0",
917 | "range-parser": "~1.2.1",
918 | "statuses": "~1.5.0"
919 | },
920 | "dependencies": {
921 | "ms": {
922 | "version": "2.1.1",
923 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
924 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
925 | }
926 | }
927 | },
928 | "serve-static": {
929 | "version": "1.14.1",
930 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
931 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
932 | "requires": {
933 | "encodeurl": "~1.0.2",
934 | "escape-html": "~1.0.3",
935 | "parseurl": "~1.3.3",
936 | "send": "0.17.1"
937 | }
938 | },
939 | "setprototypeof": {
940 | "version": "1.1.1",
941 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
942 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
943 | },
944 | "statuses": {
945 | "version": "1.5.0",
946 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
947 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
948 | },
949 | "toidentifier": {
950 | "version": "1.0.0",
951 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
952 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
953 | },
954 | "type-is": {
955 | "version": "1.6.18",
956 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
957 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
958 | "requires": {
959 | "media-typer": "0.3.0",
960 | "mime-types": "~2.1.24"
961 | }
962 | },
963 | "unpipe": {
964 | "version": "1.0.0",
965 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
966 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
967 | },
968 | "utils-fs-read-file": {
969 | "version": "1.0.0",
970 | "resolved": "https://registry.npmjs.org/utils-fs-read-file/-/utils-fs-read-file-1.0.0.tgz",
971 | "integrity": "sha1-i+Ey30ch1pE8bleFq4gOm8I2L6A="
972 | },
973 | "utils-fs-read-properties": {
974 | "version": "1.0.0",
975 | "resolved": "https://registry.npmjs.org/utils-fs-read-properties/-/utils-fs-read-properties-1.0.0.tgz",
976 | "integrity": "sha1-zny2sZ9qxg+ugAgWnzMuWMmiSRk=",
977 | "requires": {
978 | "properties": "^1.2.1",
979 | "utils-fs-read-file": "^1.0.0",
980 | "utils-properties-parse": "^1.0.0",
981 | "validate.io-string-primitive": "^1.0.0"
982 | }
983 | },
984 | "utils-merge": {
985 | "version": "1.0.1",
986 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
987 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
988 | },
989 | "utils-properties-parse": {
990 | "version": "1.0.0",
991 | "resolved": "https://registry.npmjs.org/utils-properties-parse/-/utils-properties-parse-1.0.0.tgz",
992 | "integrity": "sha1-jN8FyvpdGgvcbtrOyRSSqeW3ybQ=",
993 | "requires": {
994 | "properties": "1.x.x"
995 | }
996 | },
997 | "validate.io-string-primitive": {
998 | "version": "1.0.1",
999 | "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz",
1000 | "integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4="
1001 | },
1002 | "vary": {
1003 | "version": "1.1.2",
1004 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1005 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1006 | }
1007 | }
1008 | }
1009 |
--------------------------------------------------------------------------------
/microservices/order/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "node",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "server.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "node server.js"
9 | },
10 | "keywords": [],
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "express": "^4.17.1",
15 | "express-actuator": "^1.7.0"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/microservices/order/server.js:
--------------------------------------------------------------------------------
1 | const express = require('express'); // call express
2 | const actuator = require('express-actuator')
3 | const app = express(); // define our app using express
4 |
5 | // envs
6 | const port = process.env.PORT || 8081; // set our port
7 | const appName = process.env.APP_NAME
8 | const killInSeconds = process.env.KILL_IN_SECONDS
9 |
10 | const orders = [
11 | {customerId: 1, items: ['Apples', 'Bananas']},
12 | {customerId: 2, items: ['Water']},
13 | ];
14 |
15 | // ROUTES FOR OUR API
16 | // =============================================================================
17 | var router = express.Router(); // get an instance of the express Router
18 |
19 | app.use(actuator())
20 |
21 | router.get('/api/v1/order/customer/:customerId', function(req, res) {
22 | const customerOrders = orders.find(o => o.customerId == req.params.customerId);
23 | if (customerOrders) {
24 | return res.json(customerOrders);
25 | }
26 | return res.json([]);
27 | });
28 |
29 | app.use('/', router);
30 |
31 | // START THE SERVER
32 | // =============================================================================
33 | app.listen(port, () => {
34 | console.log(`${appName || ""} Server Running on Port ${port}`);
35 | if (killInSeconds) {
36 | console.log(`server will die in ${killInSeconds} seconds`)
37 | setTimeout(() => {
38 | process.exit(1);
39 | }, killInSeconds * 1000);
40 | }
41 | });
--------------------------------------------------------------------------------
/yamls/config-maps.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ConfigMap
3 | metadata:
4 | name: app-properties
5 | data:
6 | app-name: order
7 | app-version: 1.0.0
8 | team: engineering
9 |
10 | ---
11 |
12 | apiVersion: v1
13 | kind: ConfigMap
14 | metadata:
15 | name: nginx-conf
16 | data:
17 | nginx.conf: |
18 | server {
19 | listen 80;
20 | server_name localhost;
21 |
22 | location / {
23 | root /usr/share/nginx/html;
24 | index index.html index.htm;
25 | }
26 |
27 |
28 | # redirect server error pages to the static page /50x.html
29 | #
30 | error_page 500 502 503 504 /50x.html;
31 | location = /50x.html {
32 | root /usr/share/nginx/html;
33 | }
34 |
35 | location /health {
36 | access_log off;
37 | return 200 "healthy\n";
38 | }
39 | }
40 |
41 | ---
42 |
43 | apiVersion: apps/v1
44 | kind: Deployment
45 | metadata:
46 | name: config-map
47 | spec:
48 | selector:
49 | matchLabels:
50 | app: config-map
51 | template:
52 | metadata:
53 | labels:
54 | app: config-map
55 | spec:
56 | volumes:
57 | - name: nginx-conf
58 | configMap:
59 | name: nginx-conf
60 | - name: app-properties
61 | configMap:
62 | name: app-properties
63 | - name: config
64 | projected:
65 | sources:
66 | - configMap:
67 | name: nginx-conf
68 | - configMap:
69 | name: app-properties
70 | containers:
71 | - name: config-map-volume
72 | volumeMounts:
73 | - mountPath: /etc/order/ngnix
74 | name: nginx-conf
75 | - mountPath: /etc/order/properties
76 | name: app-properties
77 | - mountPath: /etc/order/config
78 | name: config
79 | image: busybox
80 | command:
81 | - "/bin/sh"
82 | - "-c"
83 | args:
84 | - "sleep 3600"
85 | resources:
86 | limits:
87 | memory: "128Mi"
88 | cpu: "500m"
89 | - name: config-map-env
90 | image: busybox
91 | resources:
92 | limits:
93 | memory: "128Mi"
94 | cpu: "500m"
95 | command:
96 | - "/bin/sh"
97 | - "-c"
98 | args:
99 | - "env && sleep 3600"
100 | env:
101 | - name: APP_VERSION
102 | valueFrom:
103 | configMapKeyRef:
104 | name: app-properties
105 | key: app-version
106 | - name: APP_NAME
107 | valueFrom:
108 | configMapKeyRef:
109 | name: app-properties
110 | key: app-name
111 | - name: TEAM
112 | valueFrom:
113 | configMapKeyRef:
114 | name: app-properties
115 | key: team
116 | - name: NGINX_CONF
117 | valueFrom:
118 | configMapKeyRef:
119 | name: nginx-conf
120 | key: nginx.conf
121 |
--------------------------------------------------------------------------------
/yamls/cron-job.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: batch/v1beta1
2 | kind: CronJob
3 | metadata:
4 | name: db-backup-cron-job
5 | spec:
6 | schedule: "*/1 * * * *"
7 | jobTemplate:
8 | spec:
9 | template:
10 | spec:
11 | containers:
12 | - name: backup
13 | image: busybox
14 | command: ["/bin/sh", "-c"]
15 | args:
16 | - "echo 'performing db backup...' && sleep 20"
17 | restartPolicy: Never
18 |
--------------------------------------------------------------------------------
/yamls/customer-deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: customer
5 | namespace: engineering
6 | spec:
7 | replicas: 2
8 | selector:
9 | matchLabels:
10 | app: customer
11 | template:
12 | metadata:
13 | labels:
14 | app: customer
15 | environment: test
16 | tier: backend
17 | department: engineering
18 | spec:
19 | containers:
20 | - name: customer
21 | image: "amigoscode/kubernetes:customer-v1"
22 | resources:
23 | limits:
24 | memory: "128Mi"
25 | cpu: "500m"
26 | livenessProbe:
27 | httpGet:
28 | path: /health
29 | port: 8080
30 | initialDelaySeconds: 5
31 | timeoutSeconds: 1
32 | failureThreshold: 3
33 | periodSeconds: 5
34 | readinessProbe:
35 | httpGet:
36 | path: /health
37 | port: 8080
38 | initialDelaySeconds: 10
39 | timeoutSeconds: 1
40 | failureThreshold: 3
41 | periodSeconds: 5
42 | env:
43 | - name: ORDER_SERVICE
44 | value: "order"
45 | ports:
46 | - containerPort: 8080
47 |
48 | ---
49 | apiVersion: v1
50 | kind: Service
51 | metadata:
52 | name: customer-node
53 | namespace: engineering
54 | spec:
55 | type: NodePort
56 | selector:
57 | app: customer
58 | ports:
59 | - port: 80
60 | targetPort: 8080
61 | nodePort: 30000
62 |
63 | ---
64 | apiVersion: v1
65 | kind: Service
66 | metadata:
67 | name: customer
68 | namespace: engineering
69 | spec:
70 | type: ClusterIP
71 | selector:
72 | app: customer
73 | ports:
74 | - port: 80
75 | targetPort: 8080
76 |
--------------------------------------------------------------------------------
/yamls/daemon-set.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: logging
5 | ---
6 | apiVersion: apps/v1
7 | kind: DaemonSet
8 | metadata:
9 | name: fluentd-elasticsearch
10 | namespace: logging
11 | labels:
12 | k8s-app: fluentd-logging
13 | spec:
14 | selector:
15 | matchLabels:
16 | name: fluentd-elasticsearch
17 | template:
18 | metadata:
19 | labels:
20 | name: fluentd-elasticsearch
21 | spec:
22 | tolerations:
23 | # this toleration is to have the daemonset runnable on master nodes
24 | # remove it if your masters can't run pods
25 | - key: node-role.kubernetes.io/master
26 | operator: Exists
27 | effect: NoSchedule
28 | containers:
29 | - name: fluentd-elasticsearch
30 | image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
31 | resources:
32 | limits:
33 | memory: 200Mi
34 | requests:
35 | cpu: 100m
36 | memory: 200Mi
37 | volumeMounts:
38 | - name: varlog
39 | mountPath: /var/log
40 | - name: varlibdockercontainers
41 | mountPath: /var/lib/docker/containers
42 | readOnly: true
43 | terminationGracePeriodSeconds: 30
44 | volumes:
45 | - name: varlog
46 | hostPath:
47 | path: /var/log
48 | - name: varlibdockercontainers
49 | hostPath:
50 | path: /var/lib/docker/containers
--------------------------------------------------------------------------------
/yamls/deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-world
5 | spec:
6 | replicas: 2
7 | revisionHistoryLimit: 20
8 | strategy:
9 | type: RollingUpdate
10 | rollingUpdate:
11 | maxUnavailable: 1
12 | maxSurge: 1
13 | selector:
14 | matchLabels:
15 | app: hello-world
16 | template:
17 | metadata:
18 | labels:
19 | app: hello-world
20 | environment: dev
21 | tier: backend
22 | department: engineering
23 | annotations:
24 | kubernetes.io/change-cause: "amigoscode/kubernetes:hello-world-v4"
25 | spec:
26 | containers:
27 | - name: hello-world
28 | image: amigoscode/kubernetes:hello-world-v4
29 | resources:
30 | limits:
31 | memory: "128Mi"
32 | cpu: "500m"
33 | ports:
34 | - containerPort: 80
35 |
--------------------------------------------------------------------------------
/yamls/empty-dir-volume.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: emptydir-volume
5 | spec:
6 | selector:
7 | matchLabels:
8 | app: emptydir-volume
9 | template:
10 | metadata:
11 | labels:
12 | app: emptydir-volume
13 | spec:
14 | volumes:
15 | - name: cache
16 | emptyDir: {}
17 | - name: thumbnails
18 | emptyDir: {}
19 | containers:
20 | - name: one
21 | image: busybox
22 | command:
23 | - "/bin/sh"
24 | args:
25 | - "-c"
26 | - "touch /foo/bar.txt && sleep 3600"
27 | resources:
28 | limits:
29 | memory: "128Mi"
30 | cpu: "500m"
31 | volumeMounts:
32 | - name: cache
33 | mountPath: /foo
34 | - name: thumbnails
35 | mountPath: /thumbnails
36 | - name: two
37 | image: busybox
38 | command:
39 | - "sleep"
40 | - "3600"
41 | resources:
42 | limits:
43 | memory: "128Mi"
44 | cpu: "500m"
45 | volumeMounts:
46 | - name: cache
47 | mountPath: /hello
48 |
--------------------------------------------------------------------------------
/yamls/frontend.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: frontend
5 | namespace: engineering
6 | spec:
7 | replicas: 2
8 | selector:
9 | matchLabels:
10 | app: frontend
11 | template:
12 | metadata:
13 | labels:
14 | app: frontend
15 | environment: test
16 | tier: frontend
17 | department: engineering
18 | spec:
19 | containers:
20 | - name: frontend
21 | image: amigoscode/kubernetes:frontend-v1
22 | resources:
23 | requests:
24 | memory: "128Mi"
25 | cpu: "500m"
26 | limits:
27 | memory: "512Mi"
28 | cpu: "1000m"
29 | ports:
30 | - containerPort: 80
31 |
32 | ---
33 | apiVersion: v1
34 | kind: Service
35 | metadata:
36 | name: frontend
37 | namespace: engineering
38 | spec:
39 | type: LoadBalancer
40 | selector:
41 | app: frontend
42 | ports:
43 | - port: 80
44 | targetPort: 80
45 |
--------------------------------------------------------------------------------
/yamls/host-path-volume.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hostpath
5 | spec:
6 | selector:
7 | matchLabels:
8 | app: hostpath
9 | template:
10 | metadata:
11 | labels:
12 | app: hostpath
13 | spec:
14 | volumes:
15 | - name: var-log
16 | hostPath:
17 | path: /var/log
18 | containers:
19 | - name: hostpath
20 | volumeMounts:
21 | - mountPath: /var/log
22 | name: var-log
23 | readOnly: true
24 | image: busybox
25 | resources:
26 | limits:
27 | memory: "128Mi"
28 | cpu: "500m"
29 | command:
30 | - "sleep"
31 | - "3600"
32 |
--------------------------------------------------------------------------------
/yamls/job.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: batch/v1
2 | kind: Job
3 | metadata:
4 | name: db-backup-job
5 | spec:
6 | ttlSecondsAfterFinished: 10
7 | template:
8 | spec:
9 | containers:
10 | - name: backup
11 | image: busybox
12 | command: ["/bin/sh", "-c"]
13 | args:
14 | - "echo 'performing db backup...' && sleep 20"
15 | restartPolicy: Never
16 |
--------------------------------------------------------------------------------
/yamls/namespaces.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: engineering
5 | ---
6 | apiVersion: v1
7 | kind: Namespace
8 | metadata:
9 | name: tooling
10 | ---
11 | apiVersion: v1
12 | kind: Namespace
13 | metadata:
14 | name: ml
15 | ---
16 | apiVersion: v1
17 | kind: Namespace
18 | metadata:
19 | name: logging
--------------------------------------------------------------------------------
/yamls/order-deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: order
5 | spec:
6 | replicas: 2
7 | selector:
8 | matchLabels:
9 | app: order
10 | template:
11 | metadata:
12 | labels:
13 | app: order
14 | environment: test
15 | tier: backend
16 | department: engineering
17 | spec:
18 | containers:
19 | - name: order
20 | image: "amigoscode/kubernetes:order-v1"
21 | resources:
22 | limits:
23 | memory: "128Mi"
24 | cpu: "500m"
25 | ports:
26 | - containerPort: 8081
27 | ---
28 | apiVersion: v1
29 | kind: Service
30 | metadata:
31 | name: order
32 | spec:
33 | type: ClusterIP
34 | selector:
35 | app: order
36 | ports:
37 | - port: 80
38 | targetPort: 8081
39 |
--------------------------------------------------------------------------------
/yamls/pod.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: hello-world
5 | labels:
6 | name: hello-world
7 | environment: dev
8 | tier: backend
9 | department: engineering
10 | spec:
11 | containers:
12 | - name: hello-world
13 | image: amigoscode/kubernetes:hello-world
14 | resources:
15 | limits:
16 | memory: "128Mi"
17 | cpu: "500m"
18 | ports:
19 | - containerPort: 80
20 |
21 | ---
22 |
23 | apiVersion: v1
24 | kind: Pod
25 | metadata:
26 | name: blue
27 | labels:
28 | name: blue
29 | environment: test
30 | spec:
31 | containers:
32 | - name: blue
33 | image: amigoscode/kubernetes:blue
34 | resources:
35 | limits:
36 | memory: "128Mi"
37 | cpu: "500m"
38 | ports:
39 | - containerPort: 80
40 |
41 | ---
42 |
43 | apiVersion: v1
44 | kind: Pod
45 | metadata:
46 | name: green
47 | labels:
48 | name: green
49 | environment: test
50 | spec:
51 | containers:
52 | - name: green
53 | image: amigoscode/kubernetes:green
54 | resources:
55 | limits:
56 | memory: "128Mi"
57 | cpu: "500m"
58 | ports:
59 | - containerPort: 80
60 |
61 | ---
62 |
63 | apiVersion: v1
64 | kind: Service
65 | metadata:
66 | name: labels-and-selector
67 | spec:
68 | selector:
69 | name: green
70 | environment: test
71 | ports:
72 | - port: 80
73 | targetPort: 80
74 |
75 |
--------------------------------------------------------------------------------
/yamls/pull-secret.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: secret
5 | spec:
6 | selector:
7 | matchLabels:
8 | app: secret
9 | template:
10 | metadata:
11 | labels:
12 | app: secret
13 | spec:
14 | imagePullSecrets:
15 | - name: docker-hub-private
16 | containers:
17 | - name: secret
18 | image: amigoscode/private
19 | resources:
20 | limits:
21 | memory: "128Mi"
22 | cpu: "500m"
23 | ports:
24 | - containerPort: 80
25 |
--------------------------------------------------------------------------------
/yamls/pv-pvc.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: PersistentVolume
3 | metadata:
4 | name: mypv
5 | spec:
6 | capacity:
7 | storage: "100Mi"
8 | volumeMode: Filesystem
9 | accessModes:
10 | - ReadWriteOnce
11 | persistentVolumeReclaimPolicy: Recycle
12 | storageClassName: manual
13 | hostPath:
14 | path: "/mnt/data"
15 |
16 | ---
17 |
18 | apiVersion: v1
19 | kind: PersistentVolumeClaim
20 | metadata:
21 | name: mypvc
22 | namespace: engineering
23 | spec:
24 | resources:
25 | requests:
26 | storage: "100Mi"
27 | volumeMode: Filesystem
28 | storageClassName: "manual"
29 | accessModes:
30 | - ReadWriteOnce
31 |
32 | ---
33 |
34 | apiVersion: apps/v1
35 | kind: Deployment
36 | metadata:
37 | name: pv-pvc
38 | namespace: engineering
39 | spec:
40 | selector:
41 | matchLabels:
42 | app: pv-pvc
43 | template:
44 | metadata:
45 | labels:
46 | app: pv-pvc
47 | spec:
48 | volumes:
49 | - name: data
50 | persistentVolumeClaim:
51 | claimName: mypvc
52 | containers:
53 | - name: pv-pvc
54 | image: nginx
55 | volumeMounts:
56 | - mountPath: "/usr/share/nginx/html"
57 | name: data
58 | resources:
59 | limits:
60 | memory: "128Mi"
61 | cpu: "500m"
62 | ports:
63 | - containerPort: 80
64 |
65 | ---
66 |
67 | apiVersion: v1
68 | kind: Service
69 | metadata:
70 | name: pv-pvc
71 | namespace: engineering
72 | spec:
73 | type: LoadBalancer
74 | selector:
75 | app: pv-pvc
76 | ports:
77 | - port: 80
78 | targetPort: 80
79 |
80 |
--------------------------------------------------------------------------------
/yamls/secrets.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: secrets
5 | spec:
6 | selector:
7 | matchLabels:
8 | app: secrets
9 | template:
10 | metadata:
11 | labels:
12 | app: secrets
13 | spec:
14 | volumes:
15 | - name: secret-1
16 | secret:
17 | secretName: mysecret
18 | containers:
19 | - name: secrets
20 | image: busybox
21 | volumeMounts:
22 | - mountPath: /etc/secrets
23 | name: secret-1
24 | env:
25 | - name: AMIGOSCODE_SECRET
26 | valueFrom:
27 | secretKeyRef:
28 | name: mysecret-from-file
29 | key: secret
30 | command:
31 | - "sleep"
32 | - "3600"
33 | resources:
34 | limits:
35 | memory: "128Mi"
36 | cpu: "500m"
37 |
--------------------------------------------------------------------------------