diff --git a/internal/api/node.go b/internal/api/node.go index aa5016d..19dad39 100644 --- a/internal/api/node.go +++ b/internal/api/node.go @@ -2,6 +2,7 @@ // All rights reserved. This file is part of cc-backend. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. + package api import ( @@ -25,7 +26,6 @@ type Node struct { GpusTotal int `json:"gpusTotal"` } -// updateNodeStatesRequest model type UpdateNodeStatesRequest struct { Nodes []Node `json:"nodes"` Cluster string `json:"cluster" example:"fritz"` diff --git a/internal/repository/migrations/sqlite3/10_node-table.up.sql b/internal/repository/migrations/sqlite3/10_node-table.up.sql index 4265eb8..2291aea 100644 --- a/internal/repository/migrations/sqlite3/10_node-table.up.sql +++ b/internal/repository/migrations/sqlite3/10_node-table.up.sql @@ -1,16 +1,24 @@ +-- sqlfluff:dialect:sqlite +-- CREATE TABLE "node" ( id INTEGER PRIMARY KEY, - time_stamp INTEGER NOT NULL, hostname VARCHAR(255) NOT NULL, cluster VARCHAR(255) NOT NULL, subcluster VARCHAR(255) NOT NULL, + meta_data TEXT, -- JSON + UNIQUE (hostname, cluster) +); + +CREATE TABLE "node_state" ( + id INTEGER PRIMARY KEY, + time_stamp INTEGER NOT NULL, jobs_running INTEGER DEFAULT 0 NOT NULL, - cpus_allocated INTEGER DEFAULT 0 NOT NULL, cpus_total INTEGER DEFAULT 0 NOT NULL, - memory_allocated INTEGER DEFAULT 0 NOT NULL, memory_total INTEGER DEFAULT 0 NOT NULL, - gpus_allocated INTEGER DEFAULT 0 NOT NULL, gpus_total INTEGER DEFAULT 0 NOT NULL, + cpus_allocated INTEGER DEFAULT 0 NOT NULL, + memory_allocated INTEGER DEFAULT 0 NOT NULL, + gpus_allocated INTEGER DEFAULT 0 NOT NULL, node_state VARCHAR(255) NOT NULL CHECK (node_state IN ( 'allocated', 'reserved', 'idle', 'mixed', @@ -20,7 +28,8 @@ CREATE TABLE "node" ( CHECK (health_state IN ( 'full', 'partial', 'failed' )), - UNIQUE (hostname, cluster) + node_id INTEGER, + FOREIGN KEY (node_id) REFERENCES node (id) ); -- Add Indices For New Node Table VARCHAR Fields diff --git a/internal/repository/node.go b/internal/repository/node.go index 53af28d..0a5b9e2 100644 --- a/internal/repository/node.go +++ b/internal/repository/node.go @@ -143,12 +143,18 @@ func (r *NodeRepository) GetNode(id int64, withMeta bool) (*schema.Node, error) return node, nil } +// const NamedNodeInsert string = ` +// INSERT INTO node (time_stamp, hostname, cluster, subcluster, node_state, health_state, +// +// cpus_allocated, cpus_total, memory_allocated, memory_total, gpus_allocated, gpus_total) +// VALUES (:time_stamp, :hostname, :cluster, :subcluster, :node_state, :health_state, +// :cpus_allocated, :cpus_total, :memory_allocated, :memory_total, :gpus_allocated, :gpus_total);` const NamedNodeInsert string = ` -INSERT INTO node (time_stamp, hostname, cluster, subcluster, node_state, health_state, - cpus_allocated, cpus_total, memory_allocated, memory_total, gpus_allocated, gpus_total) - VALUES (:time_stamp, :hostname, :cluster, :subcluster, :node_state, :health_state, - :cpus_allocated, :cpus_total, :memory_allocated, :memory_total, :gpus_allocated, :gpus_total);` +INSERT INTO node (hostname, cluster, subcluster) + VALUES (:hostname, :cluster, :subcluster);` +// AddNode adds a Node to the node table. This can be triggered by a node collector registration or +// from a nodestate update from the job scheduler. func (r *NodeRepository) AddNode(node *schema.Node) (int64, error) { var err error @@ -177,7 +183,7 @@ func (r *NodeRepository) InsertNodeState(nodeState *schema.Node) error { _, err = r.DB.NamedExec(NamedNodeInsert, nodeState) if err != nil { - cclog.Errorf("Error while adding node '%v' to database", nodeState.Hostname) + cclog.Errorf("Error while insert node '%v' to database", nodeState.Hostname) return err }