Updated Tables
This commit is contained in:
parent
1b650070d7
commit
7db1a3456b
13 changed files with 192 additions and 9 deletions
32
ROADMAP.md
Normal file
32
ROADMAP.md
Normal file
|
@ -0,0 +1,32 @@
|
|||
# Roadmap
|
||||
### The end goal of this application is to provide a powerful application able to process and handle all of the your realtime QA data needs
|
||||
|
||||
## v0.0.1
|
||||
- [x] Initial Skeleton
|
||||
- [x] Frontend Drafts
|
||||
- [ ] Frontend Core
|
||||
- [ ] Frontend Pages
|
||||
|
||||
## v0.0.2
|
||||
- [ ] Database Queries (Req PG)
|
||||
- [ ] Database Tables (Req PG)
|
||||
- [ ] Backend Routes (Req Database)
|
||||
- [ ] Crons
|
||||
|
||||
## v0.0.3
|
||||
- [ ] Rabbitmq Consumers (Req Database)
|
||||
- [ ] Alerting
|
||||
- [ ] Silencing
|
||||
|
||||
## v0.0.4
|
||||
- [ ] Auth
|
||||
|
||||
## v0.0.5
|
||||
- [ ] Docker config
|
||||
- [ ] Gitlab Integration
|
||||
- [ ] Garden config
|
||||
|
||||
## v0.0.6
|
||||
- [ ] Internal Tests
|
||||
- [ ] Self Test Suite
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
import { v4 } from "uuid";
|
||||
import applyJob from "./kubernetes.js";
|
||||
|
||||
export default class JobManager {
|
||||
constructor(clientMaxJobs) {
|
||||
this.clientMaxJobs = clientMaxJobs;
|
||||
const maxJobs = process.env.MAX_JOBS ? parseInt(process.env.MAX_JOBS) : 3;
|
||||
|
||||
class JobManager {
|
||||
constructor() {
|
||||
this.clientMaxJobs = maxJobs;
|
||||
this.clients = {};
|
||||
}
|
||||
|
||||
|
@ -53,3 +55,5 @@ export default class JobManager {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default new JobManager();
|
||||
|
|
|
@ -6,7 +6,7 @@ import { INFO, OK, logInfo } from "../util/logging.js";
|
|||
// Import Core Modules
|
||||
import expressApp from "./server.js";
|
||||
import applySockets from "../sockets/handler.js";
|
||||
import JobManager from "./JobManager.js";
|
||||
import jobManager from "./JobManager.js";
|
||||
import rabbiteer from "../rabbit/rabbit-workers.js";
|
||||
|
||||
// Constants
|
||||
|
@ -17,12 +17,12 @@ const port = process.env.QUALITEER_DEV_PORT ?? 52000;
|
|||
export default class Qualiteer {
|
||||
constructor(options = {}) {
|
||||
for (var k in options) this[k] = options[k];
|
||||
this.jobs = new JobManager(options.maxClientJobs ?? 3);
|
||||
this.jobs = jobManager;
|
||||
this.port = options.port ?? port;
|
||||
}
|
||||
|
||||
async _preinitialize() {
|
||||
logInfo(fig.textSync(title, "Cosmike"));
|
||||
logInfo(fig.textSync(title, "Cyberlarge"));
|
||||
INFO("INIT", "Initializing...");
|
||||
this.app = expressApp;
|
||||
this.server = http.createServer(this.app);
|
||||
|
|
|
@ -3,6 +3,10 @@ import express from "express";
|
|||
|
||||
// Routes
|
||||
import results from "../routes/results-route.js";
|
||||
import alerting from "../routes/alerting-route.js";
|
||||
import react from "../routes/react-route.js";
|
||||
import tests from "../routes/tests-route.js";
|
||||
import jobs from "../routes/jobs-route.js";
|
||||
|
||||
const app = express();
|
||||
app.all("/", (req, res) => res.redirect("/qualiteer"));
|
||||
|
@ -10,6 +14,10 @@ app.all("/", (req, res) => res.redirect("/qualiteer"));
|
|||
// Middlewares
|
||||
|
||||
// Routes
|
||||
app.use(react); // Static Build Route
|
||||
app.use("/api/results", results);
|
||||
app.use("/api/alerting", alerting);
|
||||
app.use("/api/tests", tests);
|
||||
app.use("/api/jobs", jobs);
|
||||
|
||||
export default app;
|
||||
|
|
42
lib/database/TABLES.md
Normal file
42
lib/database/TABLES.md
Normal file
|
@ -0,0 +1,42 @@
|
|||
CREATE SEQUENCE test_results_id_seq;
|
||||
CREATE TABLE test_results (
|
||||
id bigint NOT NULL DEFAULT nextval('test_results_seq') PRIMARY KEY,
|
||||
test_name varchar(255) DEFAULT NULL,
|
||||
test_class varchar(255) DEFAULT NULL,
|
||||
test_method varchar(255) DEFAULT NULL,
|
||||
test_path varchar(255) DEFAULT NULL,
|
||||
test_type varchar(32) DEFAULT NULL,
|
||||
test_timestamp timestamptz NOT NULL DEFAULT now(),
|
||||
test_retry BOOLEAN DEFAULT FALSE,
|
||||
origin varchar(255) DEFAULT NULL,
|
||||
failed BOOLEAN DEFAULT FALSE,
|
||||
failed_message varchar(2047) DEFAULT NULL,
|
||||
screenshot_url varchar(255) DEFAULT NULL,
|
||||
weblog_url varchar(255) DEFAULT NULL,
|
||||
);
|
||||
ALTER SEQUENCE test_results_id_seq OWNED BY test_results.id;
|
||||
|
||||
# Tables
|
||||
PG Database Tables Mapped Out
|
||||
|
||||
## ```test_results```
|
||||
| id | test_name | test_class | test_method | test_path | test_type | test_timestamp | test_retry | origin | failed | failed_message | screenshot_url | weblog_url |
|
||||
| int | string | string | string | string | string | timestamp | boolean | string | boolean | string | string | string |
|
||||
| 1 | My Test | My Test Class | My Failing Test Method | My Test Class Path | API | Date.now() | false | Test Suite A | true | Some Failure Messsage | screenshotUrl | weblogUrl |
|
||||
|
||||
- id Automatically Generated
|
||||
- test_name\* Name of test
|
||||
- test_class\* Name of class
|
||||
- test_method Name of failed method if failed else null
|
||||
- test_path Path to test class
|
||||
- test_type API/UI/Mobile
|
||||
- test_timestamp UTC Timestamp
|
||||
- test_retry Should test remedy failed tests
|
||||
- origin Test Suite test belongs to
|
||||
- failed Indicates if the test failed or not
|
||||
- failed_message Failure Message of test or null
|
||||
- screenshot_url Screenshot of failure
|
||||
- weblog_url Log from the web console
|
||||
|
||||
|
||||
|
15
lib/database/queries/silenced_tests.js
Normal file
15
lib/database/queries/silenced_tests.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
import pg from "../postgres.js";
|
||||
// Imports
|
||||
import {
|
||||
insertQuery,
|
||||
selectWhereAnyQuery,
|
||||
updateWhereAnyQuery,
|
||||
} from "../pg-query.js";
|
||||
// Constants
|
||||
const table = "silenced_tests";
|
||||
// Queries
|
||||
export const getSilencedTests = () => {
|
||||
const query = `SELECT * from ${table}`;
|
||||
return pg.query(query);
|
||||
};
|
||||
|
15
lib/database/queries/tests.js
Normal file
15
lib/database/queries/tests.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
import pg from "../postgres.js";
|
||||
// Imports
|
||||
import {
|
||||
insertQuery,
|
||||
selectWhereAnyQuery,
|
||||
updateWhereAnyQuery,
|
||||
} from "../pg-query.js";
|
||||
// Constants
|
||||
const table = "tests";
|
||||
// Queries
|
||||
export const getTests = () => {
|
||||
const query = `SELECT * from ${table}`;
|
||||
return pg.query(query);
|
||||
};
|
||||
|
18
lib/routes/alerting-route.js
Normal file
18
lib/routes/alerting-route.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
import { Router, json as jsonMiddleware } from "express";
|
||||
import { getSilencedTests } from "../database/queries/silenced_tests.js";
|
||||
const router = Router();
|
||||
|
||||
// Apply Middlewares
|
||||
router.use(jsonMiddleware());
|
||||
|
||||
// Get Routes
|
||||
router.get("/silenced", (req, res) => {
|
||||
getSilencedTests().then(res.send);
|
||||
});
|
||||
|
||||
// Post Routes
|
||||
router.post("/silence", (req,res)=>{
|
||||
res.sendStatus(200);
|
||||
});
|
||||
|
||||
export default router;
|
12
lib/routes/jobs-route.js
Normal file
12
lib/routes/jobs-route.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
import { Router, json as jsonMiddleware } from "express";
|
||||
import jobs from "../core/JobManager.js";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get("/jobs", (req, res) => {
|
||||
const { clients } = jobs;
|
||||
const allJobs = [];
|
||||
for(var c of clients) allJobs.push(...c.jobs);
|
||||
res.json(allJobs);
|
||||
});
|
||||
export default router;
|
6
lib/routes/react-route.js
vendored
Normal file
6
lib/routes/react-route.js
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
import express, { Router } from "express";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.use("/qualiteer", express.static("build/"));
|
||||
export default router;
|
|
@ -1,9 +1,18 @@
|
|||
import express from "express";
|
||||
import { Router, json as jsonMiddleware } from "express";
|
||||
import { getCurrentlyFailing } from "../database/queries/test_results.js";
|
||||
const router = express.Router();
|
||||
const router = Router();
|
||||
|
||||
// Apply Middlewares
|
||||
router.use(jsonMiddleware());
|
||||
|
||||
// Get Routes
|
||||
router.get("/failing", (req, res) => {
|
||||
res.send([]);
|
||||
});
|
||||
|
||||
// Post Routes
|
||||
router.post("/history", (req,res)=>{
|
||||
res.send([]);
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
|
22
lib/routes/tests-route.js
Normal file
22
lib/routes/tests-route.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
import { Router, json as jsonMiddleware } from "express";
|
||||
import { getTests } from "../database/queries/tests.js";
|
||||
const router = Router();
|
||||
|
||||
const maxSize = 1024 * 1024 * 100; // 100MB
|
||||
|
||||
// Apply Middlewares
|
||||
router.use(jsonMiddleware({limit: maxSize}));
|
||||
|
||||
// Get Routes
|
||||
router.get("/tests", async (req, res) => {
|
||||
const tests = await getTests();
|
||||
res.json(tests);
|
||||
});
|
||||
|
||||
// Post Routes
|
||||
router.post("/update", (req,res)=>{
|
||||
// Update All Tests
|
||||
res.sendStatus(200);
|
||||
});
|
||||
|
||||
export default router;
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "qualiteer",
|
||||
"version": "1.0.0",
|
||||
"version": "0.0.1",
|
||||
"description": "QA Data Management",
|
||||
"license": "LGPL-2.1-only",
|
||||
"author": "Dunemask",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue