diff --git a/api/main.go b/api/main.go
index 23992bf..9208623 100644
--- a/api/main.go
+++ b/api/main.go
@@ -53,6 +53,7 @@ func New() *WebAPI {
api.router.POST("/project/create", LogRequestMiddleware(api.ProjectCreate))
api.router.GET("/project/get/:id", LogRequestMiddleware(api.ProjectGet))
api.router.GET("/project/stats/:id", LogRequestMiddleware(api.ProjectGetStats))
+ api.router.GET("/project/stats", LogRequestMiddleware(api.ProjectGetAllStats))
api.router.POST("/task/create", LogRequestMiddleware(api.TaskCreate))
api.router.GET("/task/get/:project", LogRequestMiddleware(api.TaskGetFromProject))
diff --git a/api/project.go b/api/project.go
index 8dde830..be05161 100644
--- a/api/project.go
+++ b/api/project.go
@@ -33,6 +33,12 @@ type GetProjectStatsResponse struct {
Stats *storage.ProjectStats `json:"stats,omitempty"`
}
+type GetAllProjectsStatsResponse struct {
+ Ok bool `json:"ok"`
+ Message string `json:"message,omitempty"`
+ Stats *[]storage.ProjectStats `json:"stats,omitempty"`
+}
+
func (api *WebAPI) ProjectCreate(r *Request) {
createReq := &CreateProjectRequest{}
@@ -125,3 +131,13 @@ func (api *WebAPI) ProjectGetStats(r *Request) {
}, 404)
}
}
+
+func (api *WebAPI) ProjectGetAllStats(r *Request) {
+
+ stats := api.Database.GetAllProjectsStats()
+
+ r.OkJson(GetAllProjectsStatsResponse{
+ Ok: true,
+ Stats: stats,
+ })
+}
diff --git a/setup.sh b/setup.sh
deleted file mode 100755
index a639ee1..0000000
--- a/setup.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env bash
-
-export INSTALL_DIR="/home/drone/task_tracker"
-
-mkdir ${INSTALL_DIR} 2> /dev/null
-
-# Gogs
-if [[ ! -d "${INSTALL_DIR}/gogs" ]]; then
- wget "https://dl.gogs.io/0.11.79/gogs_0.11.79_linux_amd64.tar.gz"
- tar -xzf "gogs_0.11.79_linux_amd64.tar.gz" -C ${INSTALL_DIR}
- rm "gogs_0.11.79_linux_amd64.tar.gz"
-fi
-
-# Postgres
-su - postgres -c "createuser task_tracker"
-su - postgres -c "dropdb gogs"
-su - postgres -c "createdb gogs"
diff --git a/storage/log.go b/storage/log.go
index 669ef49..3622fba 100644
--- a/storage/log.go
+++ b/storage/log.go
@@ -1,7 +1,6 @@
package storage
import (
- "database/sql"
"encoding/json"
"github.com/Sirupsen/logrus"
"src/task_tracker/config"
@@ -44,12 +43,6 @@ func (database *Database) SetupLoggerHook() {
func (database *Database) GetLogs(since int64, level logrus.Level) *[]LogEntry {
db := database.getDB()
- logs := getLogs(since, level, db)
-
- return logs
-}
-
-func getLogs(since int64, level logrus.Level, db *sql.DB) *[]LogEntry {
var logs []LogEntry
diff --git a/storage/project.go b/storage/project.go
index f377245..2e6a0e7 100644
--- a/storage/project.go
+++ b/storage/project.go
@@ -102,12 +102,6 @@ func scanProject(row *sql.Row) (*Project, error) {
func (database *Database) GetProjectWithRepoName(repoName string) *Project {
db := database.getDB()
- project := getProjectWithRepoName(repoName, db)
- return project
-}
-
-func getProjectWithRepoName(repoName string, db *sql.DB) *Project {
-
row := db.QueryRow(`SELECT * FROM project WHERE LOWER(git_repo)=$1`, strings.ToLower(repoName))
project, err := scanProject(row)
@@ -124,10 +118,6 @@ func getProjectWithRepoName(repoName string, db *sql.DB) *Project {
func (database *Database) UpdateProject(project *Project) {
db := database.getDB()
- updateProject(project, db)
-}
-
-func updateProject(project *Project, db *sql.DB) {
res, err := db.Exec(`UPDATE project
SET (priority, name, clone_url, git_repo, version, motd) = ($1,$2,$3,$4,$5,$6) WHERE id=$7`,
@@ -147,13 +137,6 @@ func updateProject(project *Project, db *sql.DB) {
func (database *Database) GetProjectStats(id int64) *ProjectStats {
db := database.getDB()
- stats := getProjectStats(id, db)
-
- return stats
-}
-
-func getProjectStats(id int64, db *sql.DB) *ProjectStats {
-
stats := ProjectStats{}
stats.Project = getProject(id, db)
@@ -169,7 +152,7 @@ func getProjectStats(id int64, db *sql.DB) *ProjectStats {
if err != nil {
logrus.WithError(err).WithFields(logrus.Fields{
"id": id,
- }).Warn("???") //todo
+ }).Trace("Get project stats: No task for this project")
return nil
}
@@ -187,3 +170,36 @@ func getProjectStats(id int64, db *sql.DB) *ProjectStats {
return &stats
}
+
+func (database Database) GetAllProjectsStats() *[]ProjectStats {
+ var statsList []ProjectStats
+
+ db := database.getDB()
+ rows, err := db.Query(`SELECT
+ SUM(CASE WHEN status='new' THEN 1 ELSE 0 END) newCount,
+ SUM(CASE WHEN status='failed' THEN 1 ELSE 0 END) failedCount,
+ SUM(CASE WHEN status='closed' THEN 1 ELSE 0 END) closedCount,
+ p.*
+ FROM task INNER JOIN project p on task.project = p.id
+ GROUP BY p.id`)
+ handleErr(err)
+
+ for rows.Next() {
+
+ stats := ProjectStats{}
+ p := &Project{}
+ err := rows.Scan(&stats.NewTaskCount, &stats.FailedTaskCount, &stats.ClosedTaskCount,
+ &p.Id, &p.Priority, &p.Motd, &p.Name, &p.CloneUrl, &p.GitRepo, &p.Version)
+ handleErr(err)
+
+ stats.Project = p
+
+ statsList = append(statsList, stats)
+ }
+
+ logrus.WithFields(logrus.Fields{
+ "statsList": statsList,
+ }).Trace("Get all projects stats")
+
+ return &statsList
+}
diff --git a/storage/task.go b/storage/task.go
index e4517b3..4605ae2 100644
--- a/storage/task.go
+++ b/storage/task.go
@@ -20,12 +20,6 @@ type Task struct {
func (database *Database) SaveTask(task *Task, project int64) error {
db := database.getDB()
- taskErr := saveTask(task, project, db)
-
- return taskErr
-}
-
-func saveTask(task *Task, project int64, db *sql.DB) error {
res, err := db.Exec(`
INSERT INTO task (project, max_retries, recipe, priority)
@@ -52,12 +46,6 @@ func saveTask(task *Task, project int64, db *sql.DB) error {
func (database *Database) GetTask(worker *Worker) *Task {
db := database.getDB()
- task := getTask(worker, db)
-
- return task
-}
-
-func getTask(worker *Worker, db *sql.DB) *Task {
row := db.QueryRow(`
UPDATE task
@@ -111,12 +99,6 @@ func getTaskById(id int64, db *sql.DB) *Task {
func (database Database) ReleaseTask(id int64, workerId *uuid.UUID, success bool) bool {
db := database.getDB()
- res := releaseTask(workerId, id, success, db)
-
- return res
-}
-
-func releaseTask(workerId *uuid.UUID, id int64, success bool, db *sql.DB) bool {
var res sql.Result
var err error
@@ -139,15 +121,9 @@ func releaseTask(workerId *uuid.UUID, id int64, success bool, db *sql.DB) bool {
return rowsAffected == 1
}
-func (database *Database) GetTaskFromProject(worker *Worker, project int64) *Task {
+func (database *Database) GetTaskFromProject(worker *Worker, projectId int64) *Task {
db := database.getDB()
- task := getTaskFromProject(worker, project, db)
-
- return task
-}
-
-func getTaskFromProject(worker *Worker, projectId int64, db *sql.DB) *Task {
row := db.QueryRow(`
UPDATE task
@@ -158,7 +134,7 @@ func getTaskFromProject(worker *Worker, projectId int64, db *sql.DB) *Task {
FROM task
INNER JOIN project p on task.project = p.id
WHERE assignee IS NULL AND p.id=$2
- ORDER BY p.priority DESC, task.priority DESC
+ ORDER BY task.priority DESC
LIMIT 1
)
RETURNING id`, worker.Id, projectId)
diff --git a/storage/worker.go b/storage/worker.go
index b749980..f673d2c 100644
--- a/storage/worker.go
+++ b/storage/worker.go
@@ -21,17 +21,6 @@ type Worker struct {
func (database *Database) SaveWorker(worker *Worker) {
db := database.getDB()
- saveWorker(worker, db)
-}
-
-func (database *Database) GetWorker(id uuid.UUID) *Worker {
-
- db := database.getDB()
- worker := getWorker(id, db)
- return worker
-}
-
-func saveWorker(worker *Worker, db *sql.DB) {
identityId := getOrCreateIdentity(worker.Identity, db)
@@ -45,7 +34,9 @@ func saveWorker(worker *Worker, db *sql.DB) {
}).Trace("Database.saveWorker INSERT worker")
}
-func getWorker(id uuid.UUID, db *sql.DB) *Worker {
+func (database *Database) GetWorker(id uuid.UUID) *Worker {
+
+ db := database.getDB()
worker := &Worker{}
var identityId int64
diff --git a/test/api_task_bench_test.go b/test/api_task_bench_test.go
index 897ec08..2d9b1a3 100644
--- a/test/api_task_bench_test.go
+++ b/test/api_task_bench_test.go
@@ -10,7 +10,6 @@ func BenchmarkCreateTask(b *testing.B) {
resp := createProject(api.CreateProjectRequest{
Name: "BenchmarkCreateTask" + strconv.Itoa(b.N),
- Priority: 1,
GitRepo: "benchmark_test" + strconv.Itoa(b.N),
Version: "f09e8c9r0w839x0c43",
CloneUrl: "http://localhost",
diff --git a/web/angular/e2e/protractor.conf.js b/web/angular/e2e/protractor.conf.js
old mode 100644
new mode 100755
diff --git a/web/angular/e2e/src/app.e2e-spec.ts b/web/angular/e2e/src/app.e2e-spec.ts
old mode 100644
new mode 100755
diff --git a/web/angular/e2e/src/app.po.ts b/web/angular/e2e/src/app.po.ts
old mode 100644
new mode 100755
diff --git a/web/angular/e2e/tsconfig.e2e.json b/web/angular/e2e/tsconfig.e2e.json
old mode 100644
new mode 100755
diff --git a/web/angular/src/app/api.service.ts b/web/angular/src/app/api.service.ts
old mode 100644
new mode 100755
index 6623eab..71b14aa
--- a/web/angular/src/app/api.service.ts
+++ b/web/angular/src/app/api.service.ts
@@ -12,10 +12,18 @@ export class ApiService {
}
getLogs() {
- return this.http.get(this.url + "/logs");
+ return this.http.post(this.url + "/logs", "{\"level\":\"info\", \"since\":10000}");
}
getProjectStats(id: number) {
return this.http.get(this.url + "/project/stats/" + id)
}
+
+ getProjects() {
+ return this.http.get(this.url + "/project/stats")
+ }
+
+ getProject(id: number) {
+ return this.http.get(this.url + "/project/get/" + id)
+ }
}
diff --git a/web/angular/src/app/app-routing.module.ts b/web/angular/src/app/app-routing.module.ts
old mode 100644
new mode 100755
index b442425..699534b
--- a/web/angular/src/app/app-routing.module.ts
+++ b/web/angular/src/app/app-routing.module.ts
@@ -2,10 +2,16 @@ import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {LogsComponent} from "./logs/logs.component";
import {ProjectDashboardComponent} from "./project-dashboard/project-dashboard.component";
+import {ProjectListComponent} from "./project-list/project-list.component";
+import {CreateProjectComponent} from "./create-project/create-project.component";
+import {UpdateProjectComponent} from "./update-project/update-project.component";
const routes: Routes = [
{path: "log", component: LogsComponent},
- {path: "project", component: ProjectDashboardComponent}
+ {path: "projects", component: ProjectListComponent},
+ {path: "project/:id", component: ProjectDashboardComponent},
+ {path: "project/:id/update", component: UpdateProjectComponent},
+ {path: "new_project", component: CreateProjectComponent}
];
@NgModule({
diff --git a/web/angular/src/app/app.component.css b/web/angular/src/app/app.component.css
old mode 100644
new mode 100755
diff --git a/web/angular/src/app/app.component.html b/web/angular/src/app/app.component.html
old mode 100644
new mode 100755
index 98b77f3..a9228dc
--- a/web/angular/src/app/app.component.html
+++ b/web/angular/src/app/app.component.html
@@ -1,8 +1,12 @@
-
{{stats.project | json}}+