CREATE TABLE host (
    id SERIAL PRIMARY KEY,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
    name VARCHAR(255) NOT NULL UNIQUE
);

CREATE TABLE host_uptime (
    id SERIAL PRIMARY KEY,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
    host_id INT NOT NULL REFERENCES host(id),
    -- uptime in seconds
    uptime INT NOT NULL
);
CREATE INDEX host_uptime_host_id_created_at_idx ON host_uptime(host_id, created_at);

CREATE TABLE host_mem (
    id SERIAL PRIMARY KEY,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
    host_id INT NOT NULL REFERENCES host(id),
    -- available memory in kB
    mem_avail INT NOT NULL
);
CREATE INDEX host_mem_host_id_created_at_idx ON host_mem(host_id, created_at);

CREATE TABLE host_disk (
    id SERIAL PRIMARY KEY,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
    host_id INT NOT NULL REFERENCES host(id),
    -- free disk space in kB
    disk_free INT NOT NULL
);
CREATE INDEX host_disk_host_id_created_at_idx ON host_disk(host_id, created_at);

CREATE TABLE host_cpu (
    id SERIAL PRIMARY KEY,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
    host_id INT NOT NULL REFERENCES host(id),
    -- cpu load for last minute
    cpu_load_1m FLOAT NOT NULL
);
CREATE INDEX host_cpu_host_id_created_at_idx ON host_cpu(host_id, created_at);
