Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f9f4762a9 | ||
|
|
cead9d5aea | ||
|
|
03de5aacfb | ||
|
|
5b9e568d54 | ||
|
|
eafbffce25 | ||
|
|
06c49d551d |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
venv/
|
venv/
|
||||||
__pycache__/
|
__pycache__/
|
||||||
db/
|
db/
|
||||||
staticfiles/
|
staticfiles/
|
||||||
|
.vscode/settings.json
|
||||||
@@ -17,14 +17,18 @@ build:
|
|||||||
name: gcr.io/kaniko-project/executor:debug
|
name: gcr.io/kaniko-project/executor:debug
|
||||||
entrypoint: [""]
|
entrypoint: [""]
|
||||||
script:
|
script:
|
||||||
- echo $DEPLOY
|
|
||||||
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
|
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
|
||||||
|
|
||||||
test:
|
test:
|
||||||
stage: test
|
stage: test
|
||||||
|
variables:
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
only:
|
only:
|
||||||
variables:
|
variables:
|
||||||
- $CI_COMMIT_TAG
|
- $CI_COMMIT_TAG
|
||||||
|
services:
|
||||||
|
- name: postgres:12
|
||||||
|
alias: postgres
|
||||||
image:
|
image:
|
||||||
name: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
|
name: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
|
||||||
entrypoint: [""]
|
entrypoint: [""]
|
||||||
@@ -46,6 +50,6 @@ deploy:
|
|||||||
- curl -o /usr/bin/kubectl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
|
- curl -o /usr/bin/kubectl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
|
||||||
- chmod +x /usr/bin/kubectl
|
- chmod +x /usr/bin/kubectl
|
||||||
- curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
|
- curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
|
||||||
- helm install --upgrade $DEPLOY ./helm --set image=$CI_REGISTRY_IMAGE --set tag=$CI_COMMIT_TAG
|
- helm upgrade --install $DEPLOY ./helm --set image=$CI_REGISTRY_IMAGE --set tag=$CI_COMMIT_TAG
|
||||||
- POD=$(./kubectl get pods --selector=app=$DEPLOY --output=jsonpath='{.items[*].metadata.name}')
|
- POD=$(kubectl get pods --selector=app=$DEPLOY --output=jsonpath='{.items[*].metadata.name}')
|
||||||
- ./kubectl exec $POD -- python manage.py migrate
|
- kubectl exec $POD -- python manage.py migrate
|
||||||
11
.vscode/launch.json
vendored
11
.vscode/launch.json
vendored
@@ -12,8 +12,11 @@
|
|||||||
"args": [
|
"args": [
|
||||||
"test",
|
"test",
|
||||||
],
|
],
|
||||||
|
"env": {
|
||||||
|
"DB_HOST": "localhost"
|
||||||
|
},
|
||||||
"django": true,
|
"django": true,
|
||||||
"preLaunchTask": "Migrate"
|
"preLaunchTask": "docker-compose up"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Run Server",
|
"name": "Run Server",
|
||||||
@@ -22,10 +25,12 @@
|
|||||||
"program": "${workspaceFolder}/manage.py",
|
"program": "${workspaceFolder}/manage.py",
|
||||||
"args": [
|
"args": [
|
||||||
"runserver",
|
"runserver",
|
||||||
"--noreload"
|
|
||||||
],
|
],
|
||||||
|
"env": {
|
||||||
|
"DB_HOST": "localhost"
|
||||||
|
},
|
||||||
"django": true,
|
"django": true,
|
||||||
"preLaunchTask": "Migrate"
|
"preLaunchTask": "docker-compose up"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
20
.vscode/tasks.json
vendored
20
.vscode/tasks.json
vendored
@@ -2,23 +2,9 @@
|
|||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"tasks": [
|
"tasks": [
|
||||||
{
|
{
|
||||||
"label": "Collect Static",
|
"label": "docker-compose up",
|
||||||
"command": "venv/bin/python manage.py collectstatic --no-input",
|
"command": "docker-compose up -d",
|
||||||
"type": "shell",
|
"type": "shell"
|
||||||
"presentation": {
|
|
||||||
"reveal": "always"
|
|
||||||
},
|
|
||||||
"group": "build"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dependsOn": "Collect Static",
|
|
||||||
"label": "Migrate",
|
|
||||||
"command": "venv/bin/python manage.py migrate",
|
|
||||||
"type": "shell",
|
|
||||||
"presentation": {
|
|
||||||
"reveal": "always"
|
|
||||||
},
|
|
||||||
"group": "build"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -26,6 +26,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
|
||||||
pgadmin:
|
pgadmin:
|
||||||
image: dpage/pgadmin4:4
|
image: dpage/pgadmin4:4
|
||||||
@@ -45,7 +47,7 @@ services:
|
|||||||
- "traefik.http.services.traefik-service.loadbalancer.server.port=8080"
|
- "traefik.http.services.traefik-service.loadbalancer.server.port=8080"
|
||||||
command: --api.insecure=true --providers.docker --log.level=ERROR --accesslog=true
|
command: --api.insecure=true --providers.docker --log.level=ERROR --accesslog=true
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- 80:80
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ else:
|
|||||||
burst = False
|
burst = False
|
||||||
sleep = 1 / rate
|
sleep = 1 / rate
|
||||||
print(f"Beginning load test at {rate} calls/second")
|
print(f"Beginning load test at {rate} calls/second")
|
||||||
# url = 'https://button.ducoterra.net/button/'
|
url = 'https://button.ducoterra.net/'
|
||||||
url = 'http://button.localhost/button/'
|
# url = 'http://button.localhost/'
|
||||||
|
|
||||||
def timer(func, *args, **kwargs):
|
def timer(func, *args, **kwargs):
|
||||||
then = time.time()
|
then = time.time()
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
image: hub.ducoterra.net/ducoterra/button
|
||||||
|
tag: 1.0.2
|
||||||
10
ui/tests.py
10
ui/tests.py
@@ -13,28 +13,26 @@ class SimpleTest(TestCase):
|
|||||||
def test_button(self):
|
def test_button(self):
|
||||||
# Test initial load
|
# Test initial load
|
||||||
c = Client()
|
c = Client()
|
||||||
response = c.get('/button')
|
response = c.get('/')
|
||||||
self.assertEqual(response.status_code, 301)
|
|
||||||
response = c.get('/button/')
|
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(response.context.get("achievement"), {})
|
self.assertEqual(response.context.get("achievement"), {})
|
||||||
|
|
||||||
# Test first achievement
|
# Test first achievement
|
||||||
response = c.post('/button/', {})
|
response = c.post('/', {})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(response.json().get("pressed"), 1)
|
self.assertEqual(response.json().get("pressed"), 1)
|
||||||
self.assertEqual(response.json().get("achievement"), "Clicked!")
|
self.assertEqual(response.json().get("achievement"), "Clicked!")
|
||||||
self.assertEqual(c.session.get('pressed'), 1)
|
self.assertEqual(c.session.get('pressed'), 1)
|
||||||
|
|
||||||
# Test second achievement
|
# Test second achievement
|
||||||
response = c.post('/button/', {})
|
response = c.post('/', {})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(response.json().get("pressed"), 2)
|
self.assertEqual(response.json().get("pressed"), 2)
|
||||||
self.assertEqual(response.json().get("achievement"), "Clicked Twice!")
|
self.assertEqual(response.json().get("achievement"), "Clicked Twice!")
|
||||||
self.assertEqual(c.session.get('pressed'), 2)
|
self.assertEqual(c.session.get('pressed'), 2)
|
||||||
|
|
||||||
# Test no achievement
|
# Test no achievement
|
||||||
response = c.post('/button/', {})
|
response = c.post('/', {})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(response.json().get("pressed"), 3)
|
self.assertEqual(response.json().get("pressed"), 3)
|
||||||
self.assertEqual(response.json().get("achievement"), None)
|
self.assertEqual(response.json().get("achievement"), None)
|
||||||
|
|||||||
12
ui/views.py
12
ui/views.py
@@ -10,7 +10,6 @@ achievements = {
|
|||||||
24: "I'm that old",
|
24: "I'm that old",
|
||||||
32: "2^5",
|
32: "2^5",
|
||||||
64: "2^6",
|
64: "2^6",
|
||||||
69: "Nice",
|
|
||||||
100: "one hundred",
|
100: "one hundred",
|
||||||
128: "2^7",
|
128: "2^7",
|
||||||
200: "two hundred",
|
200: "two hundred",
|
||||||
@@ -18,7 +17,6 @@ achievements = {
|
|||||||
256: "2^8",
|
256: "2^8",
|
||||||
300: "three hundred",
|
300: "three hundred",
|
||||||
400: "four hundred",
|
400: "four hundred",
|
||||||
420: "Blaze it",
|
|
||||||
500: "half thousand",
|
500: "half thousand",
|
||||||
512: "2^9",
|
512: "2^9",
|
||||||
600: "six hundred",
|
600: "six hundred",
|
||||||
@@ -55,17 +53,17 @@ achievements = {
|
|||||||
def button(request):
|
def button(request):
|
||||||
PRESSED = 'pressed'
|
PRESSED = 'pressed'
|
||||||
ACHIEVE = 'achievement'
|
ACHIEVE = 'achievement'
|
||||||
current = request.session.get(PRESSED, 0)
|
pressed = request.session.get(PRESSED, 0)
|
||||||
request.session[PRESSED] = current + 1
|
|
||||||
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
|
pressed = pressed + 1
|
||||||
|
request.session[PRESSED] = pressed
|
||||||
response = {
|
response = {
|
||||||
PRESSED: current,
|
PRESSED: pressed,
|
||||||
ACHIEVE: achievements.get(current)
|
ACHIEVE: achievements.get(pressed)
|
||||||
}
|
}
|
||||||
return JsonResponse(response)
|
return JsonResponse(response)
|
||||||
|
|
||||||
pressed = current
|
|
||||||
response = {PRESSED: pressed}
|
response = {PRESSED: pressed}
|
||||||
achieved = {k:v for k,v in achievements.items() if k <= pressed}
|
achieved = {k:v for k,v in achievements.items() if k <= pressed}
|
||||||
response.update({ACHIEVE: achieved})
|
response.update({ACHIEVE: achieved})
|
||||||
|
|||||||
Reference in New Issue
Block a user