diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..59b2054
Binary files /dev/null and b/.DS_Store differ
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7765f62
--- /dev/null
+++ b/README.md
@@ -0,0 +1,2 @@
+# Load Test
+
diff --git a/data/queries.active b/data/queries.active
new file mode 100644
index 0000000..8bfef0e
Binary files /dev/null and b/data/queries.active differ
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..2d031a5
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,114 @@
+version: '3'
+
+networks:
+ monitor-net:
+ driver: bridge
+
+volumes:
+ prometheus_data: {}
+ grafana_data: {}
+
+services:
+
+ httpbin:
+ build: '../httpbin'
+ container_name: httpbin
+ environment:
+ APP_NAME: "httpbin"
+ STATSD_HOST: "statsd"
+ STATSD_PORT: "9125"
+ ports:
+ - "8080:80"
+ networks:
+ - monitor-net
+
+ prometheus:
+ image: prom/prometheus:latest
+ container_name: prometheus
+ volumes:
+ - "./prometheus.yml:/prometheus.yml"
+ command:
+ - '--config.file=/prometheus.yml'
+ - '--log.level=debug'
+ - '--web.listen-address=:9090'
+ restart: unless-stopped
+ expose:
+ - 9090
+ ports:
+ - "9090:9090"
+ networks:
+ - monitor-net
+
+ grafana:
+ image: grafana/grafana:latest
+ container_name: grafana
+ volumes:
+ - grafana_data:/var/lib/grafana
+ - ./grafana/datasources:/etc/grafana/datasources
+ - ./grafana/dashboards:/etc/grafana/dashboards
+ environment:
+ - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
+ - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
+ - GF_USERS_ALLOW_SIGN_UP=false
+ restart: unless-stopped
+ expose:
+ - 3000
+ ports:
+ - 3000:3000
+ networks:
+ - monitor-net
+
+ nodeexporter:
+ image: prom/node-exporter:latest
+ container_name: nodeexporter
+ user: root
+ privileged: true
+ volumes:
+ - /proc:/host/proc:ro
+ - /sys:/host/sys:ro
+ - /:/rootfs:ro
+ command:
+ - '--path.procfs=/host/proc'
+ - '--path.sysfs=/host/sys'
+ - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
+ restart: unless-stopped
+ expose:
+ - 9110
+ ports:
+ - "9110:9110"
+ networks:
+ - monitor-net
+
+ cadvisor:
+ image: gcr.io/cadvisor/cadvisor:latest
+ container_name: cadvisor
+ ports:
+ - "8090:8090"
+ volumes:
+ - /:/rootfs:ro
+ - /var/run:/var/run:ro
+ - /sys:/sys:ro
+ - /var/lib/docker/:/var/lib/docker:ro
+ - /dev/disk/:/dev/disk:ro
+ devices:
+ - /dev/kmsg
+ restart: unless-stopped
+
+ statsd:
+ image: prom/statsd-exporter:latest
+ container_name: statsd
+ command:
+ - '--statsd.mapping-config=/statsd/test-mapping.conf'
+ - '--statsd.listen-udp=:9125'
+ - '--web.listen-address=:9102'
+ expose:
+ - 9102
+ - 9125
+ ports:
+ - "9125:9125"
+ - "9102:9102"
+ - "8080:8080/udp"
+ volumes:
+ - "./test-mapping.conf:/statsd/test-mapping.conf"
+ networks:
+ - monitor-net
\ No newline at end of file
diff --git a/ferramentas/.DS_Store b/ferramentas/.DS_Store
new file mode 100644
index 0000000..8ea4450
Binary files /dev/null and b/ferramentas/.DS_Store differ
diff --git a/ferramentas/apachebench/.DS_Store b/ferramentas/apachebench/.DS_Store
new file mode 100644
index 0000000..c9820c3
Binary files /dev/null and b/ferramentas/apachebench/.DS_Store differ
diff --git a/ferramentas/apachebench/100_usuarios.png b/ferramentas/apachebench/100_usuarios.png
new file mode 100644
index 0000000..734ddd5
Binary files /dev/null and b/ferramentas/apachebench/100_usuarios.png differ
diff --git a/ferramentas/apachebench/10_usuarios.png b/ferramentas/apachebench/10_usuarios.png
new file mode 100644
index 0000000..a5b6154
Binary files /dev/null and b/ferramentas/apachebench/10_usuarios.png differ
diff --git a/ferramentas/apachebench/Dashboard-1655757017561.json b/ferramentas/apachebench/Dashboard-1655757017561.json
new file mode 100644
index 0000000..bac0c1e
--- /dev/null
+++ b/ferramentas/apachebench/Dashboard-1655757017561.json
@@ -0,0 +1,432 @@
+{
+ "__inputs": [
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
+ }
+ ],
+ "__elements": [],
+ "__requires": [
+ {
+ "type": "panel",
+ "id": "gauge",
+ "name": "Gauge",
+ "version": ""
+ },
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "9.0.0"
+ },
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
+ {
+ "type": "panel",
+ "id": "stat",
+ "name": "Stat",
+ "version": ""
+ },
+ {
+ "type": "panel",
+ "id": "timeseries",
+ "name": "Time series",
+ "version": ""
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- Grafana --"
+ },
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 0,
+ "id": null,
+ "links": [],
+ "liveNow": false,
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 6,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "builder",
+ "exemplar": true,
+ "expr": "gunicorn_requests",
+ "format": "time_series",
+ "instant": false,
+ "interval": "",
+ "legendFormat": "Total",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "builder",
+ "exemplar": false,
+ "expr": "gunicorn_response_code",
+ "hide": false,
+ "instant": false,
+ "interval": "",
+ "legendFormat": "{{status}}",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Acessos",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 8
+ },
+ "id": 2,
+ "panels": [],
+ "title": "Dados",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "mappings": [],
+ "thresholds": {
+ "mode": "percentage",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "orange",
+ "value": 70
+ },
+ {
+ "color": "red",
+ "value": 85
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 6,
+ "x": 0,
+ "y": 9
+ },
+ "id": 8,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true
+ },
+ "pluginVersion": "9.0.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "builder",
+ "expr": "gunicorn_workers",
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Workers",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "smooth",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 8,
+ "x": 6,
+ "y": 9
+ },
+ "id": 10,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "builder",
+ "expr": "gunicorn_request_duration",
+ "legendFormat": "Quant. {{quantile}}%",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Quartis",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "smooth",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 13,
+ "w": 10,
+ "x": 14,
+ "y": 9
+ },
+ "id": 12,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "builder",
+ "expr": "avg(gunicorn_request_duration_sum)",
+ "legendFormat": "Média",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Média",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "5s",
+ "schemaVersion": 36,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": []
+ },
+ "time": {
+ "from": "now-1m",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "",
+ "title": "Dashboard",
+ "uid": "Fxo7BWqnk",
+ "version": 2,
+ "weekStart": ""
+}
\ No newline at end of file
diff --git a/ferramentas/apachebench/Teste ApacheBench.txt b/ferramentas/apachebench/Teste ApacheBench.txt
new file mode 100644
index 0000000..666032d
--- /dev/null
+++ b/ferramentas/apachebench/Teste ApacheBench.txt
@@ -0,0 +1,12 @@
+* ApacheBench - Teste de Carga
+Documentação: https://httpd.apache.org/docs/2.4/programs/ab.html
+
+1) Inicializar HttpBin em Docker na porta 8080 de Localhost
+Comando: sudo docker run -p 8080:80 kennethreitz/httpbin
+
+2) Inicializar os testes de ApacheBench com duração de 5 minutos e limite padrão de 50000 requests
+- Teste 1: 10 Usuários
+ab -c 10 -t 60 http://localhost:8080/
+
+- Teste 2: 100 Usuários
+ab -c 100 -t 300 http://localhost:8080/
diff --git a/ferramentas/artillery/100_usuarios.html b/ferramentas/artillery/100_usuarios.html
new file mode 100644
index 0000000..4535f40
--- /dev/null
+++ b/ferramentas/artillery/100_usuarios.html
@@ -0,0 +1,1356 @@
+
+
+
+ Artillery report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+
+ Test duration |
+ 0 sec |
+
+
+ Virtual Users created |
+ 0 |
+
+
+
+ Virtual Users completed |
+ 0 |
+
+
+
+
+
+
+
+
+ Scenario counts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Errors at intervals
+
+
+
+
+
+
+
+
+ Counters at intervals
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Raw report data
+
This is the raw JSON stats output that the report was generated from.
+
+
+
+
+
+
+
+
+
+
diff --git a/ferramentas/artillery/100_usuarios.json b/ferramentas/artillery/100_usuarios.json
new file mode 100644
index 0000000..bbcac71
--- /dev/null
+++ b/ferramentas/artillery/100_usuarios.json
@@ -0,0 +1,595 @@
+{
+ "aggregate": {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 100 usuários": 6000,
+ "vusers.created": 6000,
+ "http.requests": 6000,
+ "http.codes.200": 6000,
+ "http.responses": 6000,
+ "vusers.failed": 0,
+ "vusers.completed": 6000
+ },
+ "rates": {
+ "http.request_rate": 100
+ },
+ "firstCounterAt": 1655738105239,
+ "firstHistogramAt": 1655738105288,
+ "lastCounterAt": 1655738165184,
+ "lastHistogramAt": 1655738165184,
+ "firstMetricAt": 1655738105239,
+ "lastMetricAt": 1655738165184,
+ "period": 1655738160000,
+ "summaries": {
+ "http.response_time": {
+ "min": 2,
+ "max": 249,
+ "count": 6000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.9,
+ "p95": 13.9,
+ "p99": 49.9,
+ "p999": 219.2
+ },
+ "vusers.session_length": {
+ "min": 3.8,
+ "max": 251.5,
+ "count": 6000,
+ "p50": 7.8,
+ "median": 7.8,
+ "p75": 9.9,
+ "p90": 13.1,
+ "p95": 16.9,
+ "p99": 55.2,
+ "p999": 232.8
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 2,
+ "max": 249,
+ "count": 6000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.9,
+ "p95": 13.9,
+ "p99": 49.9,
+ "p999": 219.2
+ },
+ "vusers.session_length": {
+ "min": 3.8,
+ "max": 251.5,
+ "count": 6000,
+ "p50": 7.8,
+ "median": 7.8,
+ "p75": 9.9,
+ "p90": 13.1,
+ "p95": 16.9,
+ "p99": 55.2,
+ "p999": 232.8
+ }
+ }
+ },
+ "intermediate": [
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 100 usuários": 479,
+ "vusers.created": 479,
+ "http.requests": 479,
+ "http.codes.200": 479,
+ "http.responses": 479,
+ "vusers.failed": 0,
+ "vusers.completed": 479
+ },
+ "rates": {
+ "http.request_rate": 100
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655738105239,
+ "firstHistogramAt": 1655738105288,
+ "lastCounterAt": 1655738109978,
+ "lastHistogramAt": 1655738109978,
+ "firstMetricAt": 1655738105239,
+ "lastMetricAt": 1655738109978,
+ "period": "1655738100000",
+ "summaries": {
+ "http.response_time": {
+ "min": 2,
+ "max": 41,
+ "count": 479,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 13.9,
+ "p99": 34.8,
+ "p999": 37.7
+ },
+ "vusers.session_length": {
+ "min": 4.1,
+ "max": 55.8,
+ "count": 479,
+ "p50": 7.8,
+ "median": 7.8,
+ "p75": 9.7,
+ "p90": 12.6,
+ "p95": 16,
+ "p99": 49.9,
+ "p999": 55.2
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 2,
+ "max": 41,
+ "count": 479,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 13.9,
+ "p99": 34.8,
+ "p999": 37.7
+ },
+ "vusers.session_length": {
+ "min": 4.1,
+ "max": 55.8,
+ "count": 479,
+ "p50": 7.8,
+ "median": 7.8,
+ "p75": 9.7,
+ "p90": 12.6,
+ "p95": 16,
+ "p99": 49.9,
+ "p999": 55.2
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 100 usuários": 1000,
+ "vusers.created": 1000,
+ "http.requests": 1000,
+ "http.codes.200": 1000,
+ "http.responses": 1000,
+ "vusers.failed": 0,
+ "vusers.completed": 1000
+ },
+ "rates": {
+ "http.request_rate": 100
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655738110029,
+ "firstHistogramAt": 1655738110035,
+ "lastCounterAt": 1655738119977,
+ "lastHistogramAt": 1655738119977,
+ "firstMetricAt": 1655738110029,
+ "lastMetricAt": 1655738119977,
+ "period": "1655738110000",
+ "summaries": {
+ "http.response_time": {
+ "min": 2,
+ "max": 249,
+ "count": 1000,
+ "p50": 7,
+ "median": 7,
+ "p75": 8.9,
+ "p90": 16.9,
+ "p95": 49.9,
+ "p99": 206.5,
+ "p999": 237.5
+ },
+ "vusers.session_length": {
+ "min": 3.9,
+ "max": 251.5,
+ "count": 1000,
+ "p50": 8.6,
+ "median": 8.6,
+ "p75": 11.4,
+ "p90": 19.9,
+ "p95": 51.9,
+ "p99": 219.2,
+ "p999": 247.2
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 2,
+ "max": 249,
+ "count": 1000,
+ "p50": 7,
+ "median": 7,
+ "p75": 8.9,
+ "p90": 16.9,
+ "p95": 49.9,
+ "p99": 206.5,
+ "p999": 237.5
+ },
+ "vusers.session_length": {
+ "min": 3.9,
+ "max": 251.5,
+ "count": 1000,
+ "p50": 8.6,
+ "median": 8.6,
+ "p75": 11.4,
+ "p90": 19.9,
+ "p95": 51.9,
+ "p99": 219.2,
+ "p999": 247.2
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 100 usuários": 1000,
+ "vusers.created": 1000,
+ "http.requests": 1000,
+ "http.codes.200": 1000,
+ "http.responses": 1000,
+ "vusers.failed": 0,
+ "vusers.completed": 1000
+ },
+ "rates": {
+ "http.request_rate": 100
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655738120029,
+ "firstHistogramAt": 1655738120035,
+ "lastCounterAt": 1655738129977,
+ "lastHistogramAt": 1655738129977,
+ "firstMetricAt": 1655738120029,
+ "lastMetricAt": 1655738129977,
+ "period": "1655738120000",
+ "summaries": {
+ "http.response_time": {
+ "min": 2,
+ "max": 44,
+ "count": 1000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 12.1,
+ "p99": 19.9,
+ "p999": 43.4
+ },
+ "vusers.session_length": {
+ "min": 3.8,
+ "max": 49.5,
+ "count": 1000,
+ "p50": 7.5,
+ "median": 7.5,
+ "p75": 9.7,
+ "p90": 12.3,
+ "p95": 15.3,
+ "p99": 26.3,
+ "p999": 47.9
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 2,
+ "max": 44,
+ "count": 1000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 12.1,
+ "p99": 19.9,
+ "p999": 43.4
+ },
+ "vusers.session_length": {
+ "min": 3.8,
+ "max": 49.5,
+ "count": 1000,
+ "p50": 7.5,
+ "median": 7.5,
+ "p75": 9.7,
+ "p90": 12.3,
+ "p95": 15.3,
+ "p99": 26.3,
+ "p999": 47.9
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 100 usuários": 1000,
+ "vusers.created": 1000,
+ "http.requests": 1000,
+ "http.codes.200": 1000,
+ "http.responses": 1000,
+ "vusers.failed": 0,
+ "vusers.completed": 1000
+ },
+ "rates": {
+ "http.request_rate": 100
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655738130028,
+ "firstHistogramAt": 1655738130034,
+ "lastCounterAt": 1655738139976,
+ "lastHistogramAt": 1655738139976,
+ "firstMetricAt": 1655738130028,
+ "lastMetricAt": 1655738139976,
+ "period": "1655738130000",
+ "summaries": {
+ "http.response_time": {
+ "min": 2,
+ "max": 30,
+ "count": 1000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 12.1,
+ "p99": 16,
+ "p999": 27.9
+ },
+ "vusers.session_length": {
+ "min": 3.9,
+ "max": 36.7,
+ "count": 1000,
+ "p50": 7.5,
+ "median": 7.5,
+ "p75": 9.5,
+ "p90": 12.1,
+ "p95": 14.2,
+ "p99": 19.1,
+ "p999": 33.5
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 2,
+ "max": 30,
+ "count": 1000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 12.1,
+ "p99": 16,
+ "p999": 27.9
+ },
+ "vusers.session_length": {
+ "min": 3.9,
+ "max": 36.7,
+ "count": 1000,
+ "p50": 7.5,
+ "median": 7.5,
+ "p75": 9.5,
+ "p90": 12.1,
+ "p95": 14.2,
+ "p99": 19.1,
+ "p999": 33.5
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 100 usuários": 1000,
+ "vusers.created": 1000,
+ "http.requests": 1000,
+ "http.codes.200": 1000,
+ "http.responses": 1000,
+ "vusers.failed": 0,
+ "vusers.completed": 1000
+ },
+ "rates": {
+ "http.request_rate": 100
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655738140028,
+ "firstHistogramAt": 1655738140034,
+ "lastCounterAt": 1655738149976,
+ "lastHistogramAt": 1655738149976,
+ "firstMetricAt": 1655738140028,
+ "lastMetricAt": 1655738149976,
+ "period": "1655738140000",
+ "summaries": {
+ "http.response_time": {
+ "min": 2,
+ "max": 103,
+ "count": 1000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.9,
+ "p95": 16,
+ "p99": 48.9,
+ "p999": 100.5
+ },
+ "vusers.session_length": {
+ "min": 4,
+ "max": 106.3,
+ "count": 1000,
+ "p50": 7.8,
+ "median": 7.8,
+ "p75": 10.3,
+ "p90": 13.6,
+ "p95": 20.3,
+ "p99": 50.9,
+ "p999": 102.5
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 2,
+ "max": 103,
+ "count": 1000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.9,
+ "p95": 16,
+ "p99": 48.9,
+ "p999": 100.5
+ },
+ "vusers.session_length": {
+ "min": 4,
+ "max": 106.3,
+ "count": 1000,
+ "p50": 7.8,
+ "median": 7.8,
+ "p75": 10.3,
+ "p90": 13.6,
+ "p95": 20.3,
+ "p99": 50.9,
+ "p999": 102.5
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 100 usuários": 1000,
+ "vusers.created": 1000,
+ "http.requests": 1000,
+ "http.codes.200": 1000,
+ "http.responses": 1000,
+ "vusers.failed": 0,
+ "vusers.completed": 1000
+ },
+ "rates": {
+ "http.request_rate": 100
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655738150028,
+ "firstHistogramAt": 1655738150033,
+ "lastCounterAt": 1655738159977,
+ "lastHistogramAt": 1655738159977,
+ "firstMetricAt": 1655738150028,
+ "lastMetricAt": 1655738159977,
+ "period": "1655738150000",
+ "summaries": {
+ "http.response_time": {
+ "min": 2,
+ "max": 28,
+ "count": 1000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 12.1,
+ "p99": 16.9,
+ "p999": 26.8
+ },
+ "vusers.session_length": {
+ "min": 3.9,
+ "max": 50.9,
+ "count": 1000,
+ "p50": 7.6,
+ "median": 7.6,
+ "p75": 9.7,
+ "p90": 12.1,
+ "p95": 14.4,
+ "p99": 19.9,
+ "p999": 47.9
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 2,
+ "max": 28,
+ "count": 1000,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 12.1,
+ "p99": 16.9,
+ "p999": 26.8
+ },
+ "vusers.session_length": {
+ "min": 3.9,
+ "max": 50.9,
+ "count": 1000,
+ "p50": 7.6,
+ "median": 7.6,
+ "p75": 9.7,
+ "p90": 12.1,
+ "p95": 14.4,
+ "p99": 19.9,
+ "p999": 47.9
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 100 usuários": 521,
+ "vusers.created": 521,
+ "http.requests": 521,
+ "http.codes.200": 521,
+ "http.responses": 521,
+ "vusers.failed": 0,
+ "vusers.completed": 521
+ },
+ "rates": {
+ "http.request_rate": 100
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655738160027,
+ "firstHistogramAt": 1655738160034,
+ "lastCounterAt": 1655738165184,
+ "lastHistogramAt": 1655738165184,
+ "firstMetricAt": 1655738160027,
+ "lastMetricAt": 1655738165184,
+ "period": "1655738160000",
+ "summaries": {
+ "http.response_time": {
+ "min": 2,
+ "max": 17,
+ "count": 521,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 10.9,
+ "p99": 15,
+ "p999": 16
+ },
+ "vusers.session_length": {
+ "min": 3.8,
+ "max": 18.1,
+ "count": 521,
+ "p50": 7.5,
+ "median": 7.5,
+ "p75": 9.3,
+ "p90": 11.4,
+ "p95": 13.3,
+ "p99": 16.3,
+ "p999": 18
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 2,
+ "max": 17,
+ "count": 521,
+ "p50": 6,
+ "median": 6,
+ "p75": 7.9,
+ "p90": 10.1,
+ "p95": 10.9,
+ "p99": 15,
+ "p999": 16
+ },
+ "vusers.session_length": {
+ "min": 3.8,
+ "max": 18.1,
+ "count": 521,
+ "p50": 7.5,
+ "median": 7.5,
+ "p75": 9.3,
+ "p90": 11.4,
+ "p95": 13.3,
+ "p99": 16.3,
+ "p999": 18
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ferramentas/artillery/100_usuarios.png b/ferramentas/artillery/100_usuarios.png
new file mode 100644
index 0000000..1f129f5
Binary files /dev/null and b/ferramentas/artillery/100_usuarios.png differ
diff --git a/ferramentas/artillery/10_usuarios.html b/ferramentas/artillery/10_usuarios.html
new file mode 100644
index 0000000..c7b32ec
--- /dev/null
+++ b/ferramentas/artillery/10_usuarios.html
@@ -0,0 +1,6029 @@
+
+
+
+ Artillery report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Summary
+
+
+
+
+ Test duration |
+ 0 sec |
+
+
+ Virtual Users created |
+ 0 |
+
+
+
+ Virtual Users completed |
+ 0 |
+
+
+
+
+
+
+
+
+ Scenario counts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Errors at intervals
+
+
+
+
+
+
+
+
+ Counters at intervals
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Raw report data
+
This is the raw JSON stats output that the report was generated from.
+
+
+
+
+
+
+
+
+
+
diff --git a/ferramentas/artillery/10_usuarios.json b/ferramentas/artillery/10_usuarios.json
new file mode 100644
index 0000000..d8e9921
--- /dev/null
+++ b/ferramentas/artillery/10_usuarios.json
@@ -0,0 +1,595 @@
+{
+ "aggregate": {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 600,
+ "vusers.created": 600,
+ "http.requests": 600,
+ "http.codes.200": 600,
+ "http.responses": 600,
+ "vusers.failed": 0,
+ "vusers.completed": 600
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "firstCounterAt": 1655737941956,
+ "firstHistogramAt": 1655737942018,
+ "lastCounterAt": 1655738001483,
+ "lastHistogramAt": 1655738001483,
+ "firstMetricAt": 1655737941956,
+ "lastMetricAt": 1655738001483,
+ "period": 1655738000000,
+ "summaries": {
+ "http.response_time": {
+ "min": 3,
+ "max": 50,
+ "count": 600,
+ "p50": 15,
+ "median": 15,
+ "p75": 21.1,
+ "p90": 25.8,
+ "p95": 29.1,
+ "p99": 37,
+ "p999": 48.9
+ },
+ "vusers.session_length": {
+ "min": 4.9,
+ "max": 69,
+ "count": 600,
+ "p50": 18,
+ "median": 18,
+ "p75": 24.3,
+ "p90": 30.3,
+ "p95": 33.5,
+ "p99": 41.7,
+ "p999": 67.4
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 3,
+ "max": 50,
+ "count": 600,
+ "p50": 15,
+ "median": 15,
+ "p75": 21.1,
+ "p90": 25.8,
+ "p95": 29.1,
+ "p99": 37,
+ "p999": 48.9
+ },
+ "vusers.session_length": {
+ "min": 4.9,
+ "max": 69,
+ "count": 600,
+ "p50": 18,
+ "median": 18,
+ "p75": 24.3,
+ "p90": 30.3,
+ "p95": 33.5,
+ "p99": 41.7,
+ "p999": 67.4
+ }
+ }
+ },
+ "intermediate": [
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 83,
+ "vusers.created": 83,
+ "http.requests": 83,
+ "http.codes.200": 83,
+ "http.responses": 83,
+ "vusers.failed": 0,
+ "vusers.completed": 83
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655737941956,
+ "firstHistogramAt": 1655737942018,
+ "lastCounterAt": 1655737949976,
+ "lastHistogramAt": 1655737949976,
+ "firstMetricAt": 1655737941956,
+ "lastMetricAt": 1655737949976,
+ "period": "1655737940000",
+ "summaries": {
+ "http.response_time": {
+ "min": 6,
+ "max": 50,
+ "count": 83,
+ "p50": 15,
+ "median": 15,
+ "p75": 22,
+ "p90": 26.8,
+ "p95": 30.3,
+ "p99": 46.1,
+ "p999": 46.1
+ },
+ "vusers.session_length": {
+ "min": 8.8,
+ "max": 69,
+ "count": 83,
+ "p50": 19.5,
+ "median": 19.5,
+ "p75": 25.3,
+ "p90": 32.1,
+ "p95": 34.8,
+ "p99": 67.4,
+ "p999": 67.4
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 6,
+ "max": 50,
+ "count": 83,
+ "p50": 15,
+ "median": 15,
+ "p75": 22,
+ "p90": 26.8,
+ "p95": 30.3,
+ "p99": 46.1,
+ "p999": 46.1
+ },
+ "vusers.session_length": {
+ "min": 8.8,
+ "max": 69,
+ "count": 83,
+ "p50": 19.5,
+ "median": 19.5,
+ "p75": 25.3,
+ "p90": 32.1,
+ "p95": 34.8,
+ "p99": 67.4,
+ "p999": 67.4
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655737950456,
+ "firstHistogramAt": 1655737950464,
+ "lastCounterAt": 1655737959971,
+ "lastHistogramAt": 1655737959971,
+ "firstMetricAt": 1655737950456,
+ "lastMetricAt": 1655737959971,
+ "period": "1655737950000",
+ "summaries": {
+ "http.response_time": {
+ "min": 6,
+ "max": 37,
+ "count": 100,
+ "p50": 15,
+ "median": 15,
+ "p75": 19.9,
+ "p90": 25.8,
+ "p95": 30.9,
+ "p99": 34.8,
+ "p999": 34.8
+ },
+ "vusers.session_length": {
+ "min": 7.3,
+ "max": 40.6,
+ "count": 100,
+ "p50": 18,
+ "median": 18,
+ "p75": 23.8,
+ "p90": 29.7,
+ "p95": 34.8,
+ "p99": 39.3,
+ "p999": 39.3
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 6,
+ "max": 37,
+ "count": 100,
+ "p50": 15,
+ "median": 15,
+ "p75": 19.9,
+ "p90": 25.8,
+ "p95": 30.9,
+ "p99": 34.8,
+ "p999": 34.8
+ },
+ "vusers.session_length": {
+ "min": 7.3,
+ "max": 40.6,
+ "count": 100,
+ "p50": 18,
+ "median": 18,
+ "p75": 23.8,
+ "p90": 29.7,
+ "p95": 34.8,
+ "p99": 39.3,
+ "p999": 39.3
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655737960455,
+ "firstHistogramAt": 1655737960469,
+ "lastCounterAt": 1655737969974,
+ "lastHistogramAt": 1655737969974,
+ "firstMetricAt": 1655737960455,
+ "lastMetricAt": 1655737969974,
+ "period": "1655737960000",
+ "summaries": {
+ "http.response_time": {
+ "min": 4,
+ "max": 40,
+ "count": 100,
+ "p50": 16,
+ "median": 16,
+ "p75": 21.1,
+ "p90": 26.8,
+ "p95": 32.8,
+ "p99": 37.7,
+ "p999": 37.7
+ },
+ "vusers.session_length": {
+ "min": 6.2,
+ "max": 42.7,
+ "count": 100,
+ "p50": 18.7,
+ "median": 18.7,
+ "p75": 25.8,
+ "p90": 30.9,
+ "p95": 37.7,
+ "p99": 41.7,
+ "p999": 41.7
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 4,
+ "max": 40,
+ "count": 100,
+ "p50": 16,
+ "median": 16,
+ "p75": 21.1,
+ "p90": 26.8,
+ "p95": 32.8,
+ "p99": 37.7,
+ "p999": 37.7
+ },
+ "vusers.session_length": {
+ "min": 6.2,
+ "max": 42.7,
+ "count": 100,
+ "p50": 18.7,
+ "median": 18.7,
+ "p75": 25.8,
+ "p90": 30.9,
+ "p95": 37.7,
+ "p99": 41.7,
+ "p999": 41.7
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655737970455,
+ "firstHistogramAt": 1655737970464,
+ "lastCounterAt": 1655737979970,
+ "lastHistogramAt": 1655737979970,
+ "firstMetricAt": 1655737970455,
+ "lastMetricAt": 1655737979970,
+ "period": "1655737970000",
+ "summaries": {
+ "http.response_time": {
+ "min": 6,
+ "max": 33,
+ "count": 100,
+ "p50": 16,
+ "median": 16,
+ "p75": 21.1,
+ "p90": 26.8,
+ "p95": 29.1,
+ "p99": 32.8,
+ "p999": 32.8
+ },
+ "vusers.session_length": {
+ "min": 8.2,
+ "max": 36.5,
+ "count": 100,
+ "p50": 18,
+ "median": 18,
+ "p75": 24.3,
+ "p90": 30.9,
+ "p95": 33.5,
+ "p99": 36.2,
+ "p999": 36.2
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 6,
+ "max": 33,
+ "count": 100,
+ "p50": 16,
+ "median": 16,
+ "p75": 21.1,
+ "p90": 26.8,
+ "p95": 29.1,
+ "p99": 32.8,
+ "p999": 32.8
+ },
+ "vusers.session_length": {
+ "min": 8.2,
+ "max": 36.5,
+ "count": 100,
+ "p50": 18,
+ "median": 18,
+ "p75": 24.3,
+ "p90": 30.9,
+ "p95": 33.5,
+ "p99": 36.2,
+ "p999": 36.2
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655737980455,
+ "firstHistogramAt": 1655737980467,
+ "lastCounterAt": 1655737989963,
+ "lastHistogramAt": 1655737989963,
+ "firstMetricAt": 1655737980455,
+ "lastMetricAt": 1655737989963,
+ "period": "1655737980000",
+ "summaries": {
+ "http.response_time": {
+ "min": 4,
+ "max": 36,
+ "count": 100,
+ "p50": 13.9,
+ "median": 13.9,
+ "p75": 19.1,
+ "p90": 23.8,
+ "p95": 27.9,
+ "p99": 32.8,
+ "p999": 32.8
+ },
+ "vusers.session_length": {
+ "min": 5.8,
+ "max": 38.4,
+ "count": 100,
+ "p50": 16.6,
+ "median": 16.6,
+ "p75": 21.5,
+ "p90": 26.8,
+ "p95": 30.9,
+ "p99": 35.5,
+ "p999": 35.5
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 4,
+ "max": 36,
+ "count": 100,
+ "p50": 13.9,
+ "median": 13.9,
+ "p75": 19.1,
+ "p90": 23.8,
+ "p95": 27.9,
+ "p99": 32.8,
+ "p999": 32.8
+ },
+ "vusers.session_length": {
+ "min": 5.8,
+ "max": 38.4,
+ "count": 100,
+ "p50": 16.6,
+ "median": 16.6,
+ "p75": 21.5,
+ "p90": 26.8,
+ "p95": 30.9,
+ "p99": 35.5,
+ "p999": 35.5
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655737990455,
+ "firstHistogramAt": 1655737990465,
+ "lastCounterAt": 1655737999973,
+ "lastHistogramAt": 1655737999973,
+ "firstMetricAt": 1655737990455,
+ "lastMetricAt": 1655737999973,
+ "period": "1655737990000",
+ "summaries": {
+ "http.response_time": {
+ "min": 5,
+ "max": 49,
+ "count": 100,
+ "p50": 16,
+ "median": 16,
+ "p75": 21.1,
+ "p90": 24.8,
+ "p95": 26.8,
+ "p99": 29.1,
+ "p999": 29.1
+ },
+ "vusers.session_length": {
+ "min": 6.6,
+ "max": 50.8,
+ "count": 100,
+ "p50": 18.7,
+ "median": 18.7,
+ "p75": 23.8,
+ "p90": 27.9,
+ "p95": 30.9,
+ "p99": 35.5,
+ "p999": 35.5
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 5,
+ "max": 49,
+ "count": 100,
+ "p50": 16,
+ "median": 16,
+ "p75": 21.1,
+ "p90": 24.8,
+ "p95": 26.8,
+ "p99": 29.1,
+ "p999": 29.1
+ },
+ "vusers.session_length": {
+ "min": 6.6,
+ "max": 50.8,
+ "count": 100,
+ "p50": 18.7,
+ "median": 18.7,
+ "p75": 23.8,
+ "p90": 27.9,
+ "p95": 30.9,
+ "p99": 35.5,
+ "p999": 35.5
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 17,
+ "vusers.created": 17,
+ "http.requests": 17,
+ "http.codes.200": 17,
+ "http.responses": 17,
+ "vusers.failed": 0,
+ "vusers.completed": 17
+ },
+ "rates": {
+ "http.request_rate": 17
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655738000454,
+ "firstHistogramAt": 1655738000465,
+ "lastCounterAt": 1655738001483,
+ "lastHistogramAt": 1655738001483,
+ "firstMetricAt": 1655738000454,
+ "lastMetricAt": 1655738001483,
+ "period": "1655738000000",
+ "summaries": {
+ "http.response_time": {
+ "min": 3,
+ "max": 25,
+ "count": 17,
+ "p50": 16.9,
+ "median": 16.9,
+ "p75": 21.1,
+ "p90": 22.9,
+ "p95": 24.8,
+ "p99": 24.8,
+ "p999": 24.8
+ },
+ "vusers.session_length": {
+ "min": 4.9,
+ "max": 28.1,
+ "count": 17,
+ "p50": 19.5,
+ "median": 19.5,
+ "p75": 23.8,
+ "p90": 25.8,
+ "p95": 27.4,
+ "p99": 27.4,
+ "p999": 27.4
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 3,
+ "max": 25,
+ "count": 17,
+ "p50": 16.9,
+ "median": 16.9,
+ "p75": 21.1,
+ "p90": 22.9,
+ "p95": 24.8,
+ "p99": 24.8,
+ "p999": 24.8
+ },
+ "vusers.session_length": {
+ "min": 4.9,
+ "max": 28.1,
+ "count": 17,
+ "p50": 19.5,
+ "median": 19.5,
+ "p75": 23.8,
+ "p90": 25.8,
+ "p95": 27.4,
+ "p99": 27.4,
+ "p999": 27.4
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ferramentas/artillery/10_usuarios.png b/ferramentas/artillery/10_usuarios.png
new file mode 100644
index 0000000..eb3f3b9
Binary files /dev/null and b/ferramentas/artillery/10_usuarios.png differ
diff --git a/ferramentas/artillery/comandos.txt b/ferramentas/artillery/comandos.txt
new file mode 100644
index 0000000..3beb72c
--- /dev/null
+++ b/ferramentas/artillery/comandos.txt
@@ -0,0 +1,8 @@
+npm install -g artillery
+docker run -p 80:80 kennethreitz/httpbin -> localhost
+
+artillery quick --count 10 -n 20 -k http://localhost:8080
+
+artillery run -o results_100.json -e local load-tests-sitecontagem.yml
+artillery report -o results_100.html results_100.json
+artillery report -o results.html 100_usuarios.json
\ No newline at end of file
diff --git a/ferramentas/artillery/load-tests-sitecontagem.yml b/ferramentas/artillery/load-tests-sitecontagem.yml
new file mode 100644
index 0000000..ac0b62f
--- /dev/null
+++ b/ferramentas/artillery/load-tests-sitecontagem.yml
@@ -0,0 +1,15 @@
+config:
+ environments:
+ local:
+ target: "http://localhost:8080/"
+ phases:
+ - name: Teste de Carga para 10 usuários
+ arrivalRate: 10 #determines the number of virtual users sent to the endpoints per second (10 users)
+ duration: 60 #determines that virtual users will be generated for 30 seconds
+scenarios:
+ - name: "Teste de Carga para 10 usuários"
+ flow:
+ - get:
+ url: "/"
+
+
diff --git a/ferramentas/artillery/results.json b/ferramentas/artillery/results.json
new file mode 100644
index 0000000..2d32bdc
--- /dev/null
+++ b/ferramentas/artillery/results.json
@@ -0,0 +1,595 @@
+{
+ "aggregate": {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 600,
+ "vusers.created": 600,
+ "http.requests": 600,
+ "http.codes.200": 600,
+ "http.responses": 600,
+ "vusers.failed": 0,
+ "vusers.completed": 600
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "firstCounterAt": 1655757985400,
+ "firstHistogramAt": 1655757985447,
+ "lastCounterAt": 1655758044938,
+ "lastHistogramAt": 1655758044938,
+ "firstMetricAt": 1655757985400,
+ "lastMetricAt": 1655758044938,
+ "period": 1655758040000,
+ "summaries": {
+ "http.response_time": {
+ "min": 4,
+ "max": 54,
+ "count": 600,
+ "p50": 16,
+ "median": 16,
+ "p75": 22,
+ "p90": 26.8,
+ "p95": 30.3,
+ "p99": 37.7,
+ "p999": 49.9
+ },
+ "vusers.session_length": {
+ "min": 6.6,
+ "max": 67.7,
+ "count": 600,
+ "p50": 19.9,
+ "median": 19.9,
+ "p75": 26.3,
+ "p90": 32.1,
+ "p95": 36.2,
+ "p99": 47.9,
+ "p999": 64.7
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 4,
+ "max": 54,
+ "count": 600,
+ "p50": 16,
+ "median": 16,
+ "p75": 22,
+ "p90": 26.8,
+ "p95": 30.3,
+ "p99": 37.7,
+ "p999": 49.9
+ },
+ "vusers.session_length": {
+ "min": 6.6,
+ "max": 67.7,
+ "count": 600,
+ "p50": 19.9,
+ "median": 19.9,
+ "p75": 26.3,
+ "p90": 32.1,
+ "p95": 36.2,
+ "p99": 47.9,
+ "p999": 64.7
+ }
+ }
+ },
+ "intermediate": [
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 50,
+ "vusers.created": 50,
+ "http.requests": 50,
+ "http.codes.200": 50,
+ "http.responses": 50,
+ "vusers.failed": 0,
+ "vusers.completed": 50
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655757985400,
+ "firstHistogramAt": 1655757985447,
+ "lastCounterAt": 1655757989928,
+ "lastHistogramAt": 1655757989928,
+ "firstMetricAt": 1655757985400,
+ "lastMetricAt": 1655757989928,
+ "period": "1655757980000",
+ "summaries": {
+ "http.response_time": {
+ "min": 4,
+ "max": 42,
+ "count": 50,
+ "p50": 13.1,
+ "median": 13.1,
+ "p75": 19.9,
+ "p90": 32.8,
+ "p95": 37,
+ "p99": 39.3,
+ "p999": 39.3
+ },
+ "vusers.session_length": {
+ "min": 7,
+ "max": 56.4,
+ "count": 50,
+ "p50": 18.7,
+ "median": 18.7,
+ "p75": 24.8,
+ "p90": 39.3,
+ "p95": 42.5,
+ "p99": 54.1,
+ "p999": 54.1
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 4,
+ "max": 42,
+ "count": 50,
+ "p50": 13.1,
+ "median": 13.1,
+ "p75": 19.9,
+ "p90": 32.8,
+ "p95": 37,
+ "p99": 39.3,
+ "p999": 39.3
+ },
+ "vusers.session_length": {
+ "min": 7,
+ "max": 56.4,
+ "count": 50,
+ "p50": 18.7,
+ "median": 18.7,
+ "p75": 24.8,
+ "p90": 39.3,
+ "p95": 42.5,
+ "p99": 54.1,
+ "p999": 54.1
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655757990400,
+ "firstHistogramAt": 1655757990409,
+ "lastCounterAt": 1655757999932,
+ "lastHistogramAt": 1655757999932,
+ "firstMetricAt": 1655757990400,
+ "lastMetricAt": 1655757999932,
+ "period": "1655757990000",
+ "summaries": {
+ "http.response_time": {
+ "min": 5,
+ "max": 31,
+ "count": 100,
+ "p50": 16,
+ "median": 16,
+ "p75": 22,
+ "p90": 26.8,
+ "p95": 27.9,
+ "p99": 30.9,
+ "p999": 30.9
+ },
+ "vusers.session_length": {
+ "min": 6.6,
+ "max": 39.9,
+ "count": 100,
+ "p50": 20.3,
+ "median": 20.3,
+ "p75": 26.3,
+ "p90": 32.8,
+ "p95": 34.8,
+ "p99": 39.3,
+ "p999": 39.3
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 5,
+ "max": 31,
+ "count": 100,
+ "p50": 16,
+ "median": 16,
+ "p75": 22,
+ "p90": 26.8,
+ "p95": 27.9,
+ "p99": 30.9,
+ "p999": 30.9
+ },
+ "vusers.session_length": {
+ "min": 6.6,
+ "max": 39.9,
+ "count": 100,
+ "p50": 20.3,
+ "median": 20.3,
+ "p75": 26.3,
+ "p90": 32.8,
+ "p95": 34.8,
+ "p99": 39.3,
+ "p999": 39.3
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655758000399,
+ "firstHistogramAt": 1655758000407,
+ "lastCounterAt": 1655758009930,
+ "lastHistogramAt": 1655758009930,
+ "firstMetricAt": 1655758000399,
+ "lastMetricAt": 1655758009930,
+ "period": "1655758000000",
+ "summaries": {
+ "http.response_time": {
+ "min": 6,
+ "max": 54,
+ "count": 100,
+ "p50": 16.9,
+ "median": 16.9,
+ "p75": 23.8,
+ "p90": 30.9,
+ "p95": 34.1,
+ "p99": 49.9,
+ "p999": 49.9
+ },
+ "vusers.session_length": {
+ "min": 7.8,
+ "max": 67.7,
+ "count": 100,
+ "p50": 20.7,
+ "median": 20.7,
+ "p75": 29.1,
+ "p90": 37.7,
+ "p95": 46.1,
+ "p99": 64.7,
+ "p999": 64.7
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 6,
+ "max": 54,
+ "count": 100,
+ "p50": 16.9,
+ "median": 16.9,
+ "p75": 23.8,
+ "p90": 30.9,
+ "p95": 34.1,
+ "p99": 49.9,
+ "p999": 49.9
+ },
+ "vusers.session_length": {
+ "min": 7.8,
+ "max": 67.7,
+ "count": 100,
+ "p50": 20.7,
+ "median": 20.7,
+ "p75": 29.1,
+ "p90": 37.7,
+ "p95": 46.1,
+ "p99": 64.7,
+ "p999": 64.7
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655758010399,
+ "firstHistogramAt": 1655758010409,
+ "lastCounterAt": 1655758019930,
+ "lastHistogramAt": 1655758019930,
+ "firstMetricAt": 1655758010399,
+ "lastMetricAt": 1655758019930,
+ "period": "1655758010000",
+ "summaries": {
+ "http.response_time": {
+ "min": 6,
+ "max": 33,
+ "count": 100,
+ "p50": 15,
+ "median": 15,
+ "p75": 19.9,
+ "p90": 24.8,
+ "p95": 26.8,
+ "p99": 30.3,
+ "p999": 30.3
+ },
+ "vusers.session_length": {
+ "min": 7.8,
+ "max": 36.8,
+ "count": 100,
+ "p50": 19.5,
+ "median": 19.5,
+ "p75": 24.3,
+ "p90": 30.3,
+ "p95": 32.1,
+ "p99": 35.5,
+ "p999": 35.5
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 6,
+ "max": 33,
+ "count": 100,
+ "p50": 15,
+ "median": 15,
+ "p75": 19.9,
+ "p90": 24.8,
+ "p95": 26.8,
+ "p99": 30.3,
+ "p999": 30.3
+ },
+ "vusers.session_length": {
+ "min": 7.8,
+ "max": 36.8,
+ "count": 100,
+ "p50": 19.5,
+ "median": 19.5,
+ "p75": 24.3,
+ "p90": 30.3,
+ "p95": 32.1,
+ "p99": 35.5,
+ "p999": 35.5
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655758020399,
+ "firstHistogramAt": 1655758020406,
+ "lastCounterAt": 1655758029914,
+ "lastHistogramAt": 1655758029914,
+ "firstMetricAt": 1655758020399,
+ "lastMetricAt": 1655758029914,
+ "period": "1655758020000",
+ "summaries": {
+ "http.response_time": {
+ "min": 4,
+ "max": 35,
+ "count": 100,
+ "p50": 15,
+ "median": 15,
+ "p75": 21.1,
+ "p90": 24.8,
+ "p95": 26.8,
+ "p99": 30.9,
+ "p999": 30.9
+ },
+ "vusers.session_length": {
+ "min": 6.7,
+ "max": 39.5,
+ "count": 100,
+ "p50": 18,
+ "median": 18,
+ "p75": 24.3,
+ "p90": 29.1,
+ "p95": 31.5,
+ "p99": 36.2,
+ "p999": 36.2
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 4,
+ "max": 35,
+ "count": 100,
+ "p50": 15,
+ "median": 15,
+ "p75": 21.1,
+ "p90": 24.8,
+ "p95": 26.8,
+ "p99": 30.9,
+ "p999": 30.9
+ },
+ "vusers.session_length": {
+ "min": 6.7,
+ "max": 39.5,
+ "count": 100,
+ "p50": 18,
+ "median": 18,
+ "p75": 24.3,
+ "p90": 29.1,
+ "p95": 31.5,
+ "p99": 36.2,
+ "p999": 36.2
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 100,
+ "vusers.created": 100,
+ "http.requests": 100,
+ "http.codes.200": 100,
+ "http.responses": 100,
+ "vusers.failed": 0,
+ "vusers.completed": 100
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655758030399,
+ "firstHistogramAt": 1655758030408,
+ "lastCounterAt": 1655758039933,
+ "lastHistogramAt": 1655758039933,
+ "firstMetricAt": 1655758030399,
+ "lastMetricAt": 1655758039933,
+ "period": "1655758030000",
+ "summaries": {
+ "http.response_time": {
+ "min": 6,
+ "max": 35,
+ "count": 100,
+ "p50": 15,
+ "median": 15,
+ "p75": 21.1,
+ "p90": 26.8,
+ "p95": 27.9,
+ "p99": 32.1,
+ "p999": 32.1
+ },
+ "vusers.session_length": {
+ "min": 8.1,
+ "max": 40.5,
+ "count": 100,
+ "p50": 18.7,
+ "median": 18.7,
+ "p75": 25.3,
+ "p90": 30.9,
+ "p95": 33.5,
+ "p99": 37,
+ "p999": 37
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 6,
+ "max": 35,
+ "count": 100,
+ "p50": 15,
+ "median": 15,
+ "p75": 21.1,
+ "p90": 26.8,
+ "p95": 27.9,
+ "p99": 32.1,
+ "p999": 32.1
+ },
+ "vusers.session_length": {
+ "min": 8.1,
+ "max": 40.5,
+ "count": 100,
+ "p50": 18.7,
+ "median": 18.7,
+ "p75": 25.3,
+ "p90": 30.9,
+ "p95": 33.5,
+ "p99": 37,
+ "p999": 37
+ }
+ }
+ },
+ {
+ "counters": {
+ "vusers.created_by_name.Teste de Carga para 10 usuários": 50,
+ "vusers.created": 50,
+ "http.requests": 50,
+ "http.codes.200": 50,
+ "http.responses": 50,
+ "vusers.failed": 0,
+ "vusers.completed": 50
+ },
+ "rates": {
+ "http.request_rate": 10
+ },
+ "http.request_rate": null,
+ "firstCounterAt": 1655758040399,
+ "firstHistogramAt": 1655758040410,
+ "lastCounterAt": 1655758044938,
+ "lastHistogramAt": 1655758044938,
+ "firstMetricAt": 1655758040399,
+ "lastMetricAt": 1655758044938,
+ "period": "1655758040000",
+ "summaries": {
+ "http.response_time": {
+ "min": 6,
+ "max": 32,
+ "count": 50,
+ "p50": 16.9,
+ "median": 16.9,
+ "p75": 23.8,
+ "p90": 27.9,
+ "p95": 29.1,
+ "p99": 32.1,
+ "p999": 32.1
+ },
+ "vusers.session_length": {
+ "min": 9,
+ "max": 38.1,
+ "count": 50,
+ "p50": 20.7,
+ "median": 20.7,
+ "p75": 26.8,
+ "p90": 32.8,
+ "p95": 34.1,
+ "p99": 35.5,
+ "p999": 35.5
+ }
+ },
+ "histograms": {
+ "http.response_time": {
+ "min": 6,
+ "max": 32,
+ "count": 50,
+ "p50": 16.9,
+ "median": 16.9,
+ "p75": 23.8,
+ "p90": 27.9,
+ "p95": 29.1,
+ "p99": 32.1,
+ "p999": 32.1
+ },
+ "vusers.session_length": {
+ "min": 9,
+ "max": 38.1,
+ "count": 50,
+ "p50": 20.7,
+ "median": 20.7,
+ "p75": 26.8,
+ "p90": 32.8,
+ "p95": 34.1,
+ "p99": 35.5,
+ "p999": 35.5
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/ferramentas/locust/.DS_Store b/ferramentas/locust/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/ferramentas/locust/.DS_Store differ
diff --git a/ferramentas/locust/100_usuarios.csv b/ferramentas/locust/100_usuarios.csv
new file mode 100644
index 0000000..bc81838
--- /dev/null
+++ b/ferramentas/locust/100_usuarios.csv
@@ -0,0 +1,3 @@
+Type,Name,Request Count,Failure Count,Median Response Time,Average Response Time,Min Response Time,Max Response Time,Average Content Size,Requests/s,Failures/s,50%,66%,75%,80%,90%,95%,98%,99%,99.9%,99.99%,100%
+GET,//delay/1,1532,2,1000.0,1018.4211816886495,3.0486249997920822,1169.0855000006195,327.5718015665796,25.47821633533021,0.033261379027846226,1000,1000,1000,1000,1000,1100,1100,1200,1200,1200,1200
+,Aggregated,1532,2,1000.0,1018.4211816886495,3.0486249997920822,1169.0855000006195,327.5718015665796,25.47821633533021,0.033261379027846226,1000,1000,1000,1000,1000,1100,1100,1200,1200,1200,1200
diff --git a/ferramentas/locust/__pycache__/locustfile.cpython-310.pyc b/ferramentas/locust/__pycache__/locustfile.cpython-310.pyc
new file mode 100644
index 0000000..258025f
Binary files /dev/null and b/ferramentas/locust/__pycache__/locustfile.cpython-310.pyc differ
diff --git a/ferramentas/locust/__pycache__/locustfile2.cpython-310.pyc b/ferramentas/locust/__pycache__/locustfile2.cpython-310.pyc
new file mode 100644
index 0000000..5497de0
Binary files /dev/null and b/ferramentas/locust/__pycache__/locustfile2.cpython-310.pyc differ
diff --git a/ferramentas/locust/locustfile.py b/ferramentas/locust/locustfile.py
new file mode 100644
index 0000000..834cfea
--- /dev/null
+++ b/ferramentas/locust/locustfile.py
@@ -0,0 +1,24 @@
+from locust import HttpUser, LoadTestShape, task, between
+
+class TestLocust(HttpUser):
+ wait_time = between(1, 5)
+
+ @task
+ def get_delay_1(self):
+ self.client.get("/delay/1")
+
+class StagesShape(LoadTestShape):
+
+ stages = [
+ {"duration": 60, "users": 10, "spawn_rate": 10},
+ ]
+
+ def tick(self):
+ run_time = self.get_run_time()
+
+ for stage in self.stages:
+ if run_time < stage["duration"]:
+ tick_data = (stage["users"], stage["spawn_rate"])
+ return tick_data
+
+ return None
diff --git a/ferramentas/locust/locustfile2.py b/ferramentas/locust/locustfile2.py
new file mode 100644
index 0000000..8bceb9d
--- /dev/null
+++ b/ferramentas/locust/locustfile2.py
@@ -0,0 +1,24 @@
+from locust import HttpUser, LoadTestShape, task, between
+
+class TestLocust(HttpUser):
+ wait_time = between(1, 5)
+
+ @task
+ def get_delay_1(self):
+ self.client.get("/delay/1")
+
+class StagesShape(LoadTestShape):
+
+ stages = [
+ {"duration": 60, "users": 100, "spawn_rate": 100},
+ ]
+
+ def tick(self):
+ run_time = self.get_run_time()
+
+ for stage in self.stages:
+ if run_time < stage["duration"]:
+ tick_data = (stage["users"], stage["spawn_rate"])
+ return tick_data
+
+ return None
diff --git a/ferramentas/locust/requests_1655739496.893311.csv b/ferramentas/locust/requests_1655739496.893311.csv
new file mode 100644
index 0000000..33e027c
--- /dev/null
+++ b/ferramentas/locust/requests_1655739496.893311.csv
@@ -0,0 +1,3 @@
+Type,Name,Request Count,Failure Count,Median Response Time,Average Response Time,Min Response Time,Max Response Time,Average Content Size,Requests/s,Failures/s,50%,66%,75%,80%,90%,95%,98%,99%,99.9%,99.99%,100%
+GET,//delay/1,156,0,1006.9906250000713,1024.5761359615071,1006.9906250000713,1116.8953329997748,328.0,2.602620312794178,0.0,1000,1000,1000,1000,1000,1100,1100,1100,1100,1100,1100
+,Aggregated,156,0,1006.9906250000713,1024.5761359615071,1006.9906250000713,1116.8953329997748,328.0,2.602620312794178,0.0,1000,1000,1000,1000,1000,1100,1100,1100,1100,1100,1100
diff --git a/ferramentas/vegeta/.DS_Store b/ferramentas/vegeta/.DS_Store
new file mode 100644
index 0000000..d1ea3d4
Binary files /dev/null and b/ferramentas/vegeta/.DS_Store differ
diff --git a/ferramentas/vegeta/100_usuarios.json b/ferramentas/vegeta/100_usuarios.json
new file mode 100644
index 0000000..ef4a86b
--- /dev/null
+++ b/ferramentas/vegeta/100_usuarios.json
@@ -0,0 +1 @@
+{"latencies":{"total":26417137006,"mean":4402856,"50th":4449023,"90th":5941513,"95th":6444349,"99th":8062770,"max":34624541,"min":1692625},"bytes_in":{"total":57558000,"mean":9593},"bytes_out":{"total":0,"mean":0},"earliest":"2022-06-20T12:09:03.128061583-03:00","latest":"2022-06-20T12:10:03.117170041-03:00","end":"2022-06-20T12:10:03.121499083-03:00","duration":59989108458,"wait":4329042,"requests":6000,"rate":100.01815586575624,"throughput":100.01093869641993,"success":1,"status_codes":{"200":6000},"errors":[]}
diff --git a/ferramentas/vegeta/100_usuarios.png b/ferramentas/vegeta/100_usuarios.png
new file mode 100644
index 0000000..65ac3d3
Binary files /dev/null and b/ferramentas/vegeta/100_usuarios.png differ
diff --git a/ferramentas/vegeta/10_usuarios.json b/ferramentas/vegeta/10_usuarios.json
new file mode 100644
index 0000000..6b97f4a
--- /dev/null
+++ b/ferramentas/vegeta/10_usuarios.json
@@ -0,0 +1 @@
+{"latencies":{"total":5181250290,"mean":8635417,"50th":8890712,"90th":11544714,"95th":12322104,"99th":17764291,"max":29780875,"min":2572541},"bytes_in":{"total":5755800,"mean":9593},"bytes_out":{"total":0,"mean":0},"earliest":"2022-06-20T12:07:32.886207083-03:00","latest":"2022-06-20T12:08:32.78626-03:00","end":"2022-06-20T12:08:32.791987292-03:00","duration":59900052917,"wait":5727292,"requests":600,"rate":10.016685641853854,"throughput":10.015727996642608,"success":1,"status_codes":{"200":600},"errors":[]}
diff --git a/ferramentas/vegeta/10_usuarios.png b/ferramentas/vegeta/10_usuarios.png
new file mode 100644
index 0000000..6c49767
Binary files /dev/null and b/ferramentas/vegeta/10_usuarios.png differ
diff --git a/ferramentas/vegeta/comandos.txt b/ferramentas/vegeta/comandos.txt
new file mode 100644
index 0000000..d06d2d8
--- /dev/null
+++ b/ferramentas/vegeta/comandos.txt
@@ -0,0 +1,9 @@
+brew update && brew install vegeta
+
+10 usuários:
+echo "GET http://localhost:8080" | vegeta attack -rate=10 -duration=60s | tee results.bin | vegeta report
+vegeta report -type=json results.bin > 10_usuarios.json
+
+100 usuários:
+echo "GET http://localhost:8080" | vegeta attack -rate=100 -duration=60s | tee results.bin | vegeta report
+vegeta report -type=json results.bin > 100_usuarios.json
diff --git a/ferramentas/vegeta/explicacao.txt b/ferramentas/vegeta/explicacao.txt
new file mode 100644
index 0000000..c53d0b5
--- /dev/null
+++ b/ferramentas/vegeta/explicacao.txt
@@ -0,0 +1,12 @@
+* Requests: shows the total number of requests sent during the test and the rate of the requests
+* Duration: shows the total duration of the test, the attack period simulating load on the application and the wait time
+* Latencies: shows the mean latency, 50th, 95th an 99th percentiles, respectively, of the latencies of all requests in an attack as well as the maximum latency recognized.
+* Bytes In and Bytes Out shows:
+ * The total number of bytes sent (out) or received (in) with the request or response bodies.
+ * The mean number of bytes sent (out) or received (in) with the request or response bodies.
+* Success shows the percentiles of successful requests sent to the application
+* Status Codes provides a counter of the HTTP response codes received and their oc
+
+
+-duration flag specifies the duration of the attack,
+-rate flag defines the number of requests per time unit (the default value is set to 50/1s):
\ No newline at end of file
diff --git "a/ferramentas/vegeta/metrics_1000_usu\303\241rios.json" "b/ferramentas/vegeta/metrics_1000_usu\303\241rios.json"
new file mode 100644
index 0000000..c1e4ca4
--- /dev/null
+++ "b/ferramentas/vegeta/metrics_1000_usu\303\241rios.json"
@@ -0,0 +1,42 @@
+{
+ "latencies": {
+ "total": 523314408551944,
+ "mean": 8721906809,
+ "50th": 86897,
+ "90th": 30000573893,
+ "95th": 30001706301,
+ "99th": 30003023689,
+ "max": 30034085125,
+ "min": 17875
+ },
+ "bytes_in": {
+ "total": 64791122,
+ "mean": 1079.8520333333333
+ },
+ "bytes_out": {
+ "total": 0,
+ "mean": 0
+ },
+ "earliest": "2022-05-12T20:13:43.620766458-03:00",
+ "latest": "2022-05-12T20:14:43.619579-03:00",
+ "end": "2022-05-12T20:15:09.844883416-03:00",
+ "duration": 59998812542,
+ "wait": 26225304416,
+ "requests": 60000,
+ "rate": 1000.0197913583568,
+ "throughput": 78.3307529062883,
+ "success": 0.11256666666666666,
+ "status_codes": {
+ "0": 53246,
+ "200": 6754
+ },
+ "errors": [
+ "Get \"http://localhost:8080\": read tcp [::1]:57264-\u003e[::1]:8080: read: connection reset by peer",
+ "Get \"http://localhost:8080\": dial tcp: lookup localhost: no such host",
+ "Get \"http://localhost:8080\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)",
+ "Get \"http://localhost:8080\": dial tcp 0.0.0.0:0-\u003e[::1]:8080: socket: too many open files",
+ "Get \"http://localhost:8080\": dial tcp 0.0.0.0:0-\u003e127.0.0.1:8080: socket: too many open files",
+ "Get \"http://localhost:8080\": dial tcp 0.0.0.0:0-\u003e[::1]:8080: bind: resource temporarily unavailable",
+ "Get \"http://localhost:8080\": dial tcp 0.0.0.0:0-\u003e[::1]:8080: connect: operation timed out"
+ ]
+}
\ No newline at end of file
diff --git "a/ferramentas/vegeta/metrics_100_usu\303\241rios.json" "b/ferramentas/vegeta/metrics_100_usu\303\241rios.json"
new file mode 100644
index 0000000..1af86a1
--- /dev/null
+++ "b/ferramentas/vegeta/metrics_100_usu\303\241rios.json"
@@ -0,0 +1,33 @@
+{
+ "latencies": {
+ "total": 69959536568,
+ "mean": 11659922,
+ "50th": 8385660,
+ "90th": 9770483,
+ "95th": 17894245,
+ "99th": 115010234,
+ "max": 219222625,
+ "min": 7661333
+ },
+ "bytes_in": {
+ "total": 57558000,
+ "mean": 9593
+ },
+ "bytes_out": {
+ "total": 0,
+ "mean": 0
+ },
+ "earliest": "2022-05-12T20:11:40.612051208-03:00",
+ "latest": "2022-05-12T20:12:40.601148083-03:00",
+ "end": "2022-05-12T20:12:40.609283875-03:00",
+ "duration": 59989096875,
+ "wait": 8135792,
+ "requests": 6000,
+ "rate": 100.01817517777059,
+ "throughput": 100.00461243440236,
+ "success": 1,
+ "status_codes": {
+ "200": 6000
+ },
+ "errors": []
+}
\ No newline at end of file
diff --git "a/ferramentas/vegeta/metrics_10_usu\303\241rios.json" "b/ferramentas/vegeta/metrics_10_usu\303\241rios.json"
new file mode 100644
index 0000000..38a02f0
--- /dev/null
+++ "b/ferramentas/vegeta/metrics_10_usu\303\241rios.json"
@@ -0,0 +1,33 @@
+{
+ "latencies": {
+ "total": 16613165077,
+ "mean": 27688608,
+ "50th": 28102979,
+ "90th": 31658284,
+ "95th": 32302269,
+ "99th": 34398812,
+ "max": 36303792,
+ "min": 16658292
+ },
+ "bytes_in": {
+ "total": 5755800,
+ "mean": 9593
+ },
+ "bytes_out": {
+ "total": 0,
+ "mean": 0
+ },
+ "earliest": "2022-05-12T20:09:50.007369041-03:00",
+ "latest": "2022-05-12T20:10:49.905921666-03:00",
+ "end": "2022-05-12T20:10:49.937498333-03:00",
+ "duration": 59898552625,
+ "wait": 31576667,
+ "requests": 600,
+ "rate": 10.016936531945124,
+ "throughput": 10.011658694687537,
+ "success": 1,
+ "status_codes": {
+ "200": 600
+ },
+ "errors": []
+}
\ No newline at end of file
diff --git a/ferramentas/vegeta/results.bin b/ferramentas/vegeta/results.bin
new file mode 100644
index 0000000..53cab53
Binary files /dev/null and b/ferramentas/vegeta/results.bin differ
diff --git a/grafana/datasources/Prometheus.json b/grafana/datasources/Prometheus.json
new file mode 100644
index 0000000..2ebef98
--- /dev/null
+++ b/grafana/datasources/Prometheus.json
@@ -0,0 +1,7 @@
+{
+ "name":"prometheus",
+ "type":"prometheus",
+ "url":"http://prometheus:9090",
+ "access":"proxy",
+ "basicAuth":false
+ }
\ No newline at end of file
diff --git a/grafana/setup.sh b/grafana/setup.sh
new file mode 100644
index 0000000..35a0868
--- /dev/null
+++ b/grafana/setup.sh
@@ -0,0 +1,85 @@
+#!/bin/bash
+
+# Taken from https://github.com/grafana/grafana-docker/issues/74
+
+# Script to configure grafana datasources and dashboards.
+# Intended to be run before grafana entrypoint...
+# Image: grafana/grafana:4.1.2
+# ENTRYPOINT [\"/run.sh\"]"
+
+GRAFANA_URL=${GRAFANA_URL:-http://$GF_SECURITY_ADMIN_USER:$GF_SECURITY_ADMIN_PASSWORD@localhost:3000}
+#GRAFANA_URL=http://grafana-plain.k8s.playground1.aws.ad.zopa.com
+DATASOURCES_PATH=${DATASOURCES_PATH:-/etc/grafana/datasources}
+DASHBOARDS_PATH=${DASHBOARDS_PATH:-/etc/grafana/dashboards}
+
+# Generic function to call the Vault API
+grafana_api() {
+ local verb=$1
+ local url=$2
+ local params=$3
+ local bodyfile=$4
+ local response
+ local cmd
+
+ cmd="curl -L -s --fail -H \"Accept: application/json\" -H \"Content-Type: application/json\" -X ${verb} -k ${GRAFANA_URL}${url}"
+ [[ -n "${params}" ]] && cmd="${cmd} -d \"${params}\""
+ [[ -n "${bodyfile}" ]] && cmd="${cmd} --data @${bodyfile}"
+ echo "Running ${cmd}"
+ #eval ${cmd} || return 1
+ return 0
+}
+
+wait_for_api() {
+ while ! grafana_api GET /api/user/preferences
+ do
+ sleep 5
+ done
+}
+
+install_datasources() {
+ local datasource
+
+ for datasource in ${DATASOURCES_PATH}/*.json
+ do
+ if [[ -f "${datasource}" ]]; then
+ echo "Installing datasource ${datasource}"
+ if grafana_api POST /api/datasources "" "${datasource}"; then
+ echo "installed ok"
+ else
+ echo "install failed"
+ fi
+ fi
+ done
+}
+
+install_dashboards() {
+ local dashboard
+
+ for dashboard in ${DASHBOARDS_PATH}/*.json
+ do
+ if [[ -f "${dashboard}" ]]; then
+ echo "Installing dashboard ${dashboard}"
+
+ echo "{\"dashboard\": `cat $dashboard`}" > "${dashboard}.wrapped"
+
+ if grafana_api POST /api/dashboards/db "" "${dashboard}.wrapped"; then
+ echo "installed ok"
+ else
+ echo "install failed"
+ fi
+
+ rm "${dashboard}.wrapped"
+ fi
+ done
+}
+
+configure_grafana() {
+ wait_for_api
+ install_datasources
+ install_dashboards
+}
+
+echo "Running configure_grafana in the background..."
+configure_grafana &
+/run.sh
+exit 0
diff --git a/prometheus.yml b/prometheus.yml
new file mode 100644
index 0000000..8af25d5
--- /dev/null
+++ b/prometheus.yml
@@ -0,0 +1,23 @@
+global:
+ scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
+ evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
+
+alerting:
+ alertmanagers:
+ - static_configs:
+ - targets:
+ # - alertmanager:9093
+
+# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
+rule_files:
+ # - "first_rules.yml"
+ # - "second_rules.yml"
+
+scrape_configs:
+ - job_name: "prometheus"
+ static_configs:
+ - targets: ["localhost:9090"]
+
+ - job_name: 'statsd'
+ static_configs:
+ - targets: ['statsd:9102']
\ No newline at end of file
diff --git a/test-mapping.conf b/test-mapping.conf
new file mode 100644
index 0000000..0ed93c5
--- /dev/null
+++ b/test-mapping.conf
@@ -0,0 +1,19 @@
+mappings:
+ - match: "*.gunicorn.request.status.*"
+ help: "gunicorn response code"
+ name: "gunicorn_response_code"
+ labels:
+ app: "$1"
+ status: "$2"
+ - match: "*.gunicorn.workers"
+ name: "gunicorn_workers"
+ labels:
+ app: "$1"
+ - match: "*.gunicorn.requests"
+ name: "gunicorn_requests"
+ labels:
+ app: "$1"
+ - match: "*.gunicorn.request.duration"
+ name: "gunicorn_request_duration"
+ labels:
+ app: "$1"