diff --git a/storage/store/sql/specific_postgres.go b/storage/store/sql/specific_postgres.go index 49ebfeca..ea00e839 100644 --- a/storage/store/sql/specific_postgres.go +++ b/storage/store/sql/specific_postgres.go @@ -5,8 +5,8 @@ func (s *Store) createPostgresSchema() error { CREATE TABLE IF NOT EXISTS endpoints ( endpoint_id BIGSERIAL PRIMARY KEY, endpoint_key TEXT UNIQUE, - endpoint_name TEXT, - endpoint_group TEXT, + endpoint_name TEXT NOT NULL, + endpoint_group TEXT NOT NULL, UNIQUE(endpoint_name, endpoint_group) ) `) @@ -16,9 +16,9 @@ func (s *Store) createPostgresSchema() error { _, err = s.db.Exec(` CREATE TABLE IF NOT EXISTS endpoint_events ( endpoint_event_id BIGSERIAL PRIMARY KEY, - endpoint_id INTEGER REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, - event_type TEXT, - event_timestamp TIMESTAMP + endpoint_id INTEGER NOT NULL REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, + event_type TEXT NOT NULL, + event_timestamp TIMESTAMP NOT NULL ) `) if err != nil { @@ -27,18 +27,18 @@ func (s *Store) createPostgresSchema() error { _, err = s.db.Exec(` CREATE TABLE IF NOT EXISTS endpoint_results ( endpoint_result_id BIGSERIAL PRIMARY KEY, - endpoint_id BIGINT REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, - success BOOLEAN, - errors TEXT, - connected BOOLEAN, - status BIGINT, - dns_rcode TEXT, - certificate_expiration BIGINT, - domain_expiration BIGINT, - hostname TEXT, - ip TEXT, - duration BIGINT, - timestamp TIMESTAMP + endpoint_id BIGINT NOT NULL REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, + success BOOLEAN NOT NULL, + errors TEXT NOT NULL, + connected BOOLEAN NOT NULL, + status BIGINT NOT NULL, + dns_rcode TEXT NOT NULL, + certificate_expiration BIGINT NOT NULL, + domain_expiration BIGINT NOT NULL, + hostname TEXT NOT NULL, + ip TEXT NOT NULL, + duration BIGINT NOT NULL, + timestamp TIMESTAMP NOT NULL ) `) if err != nil { @@ -47,9 +47,9 @@ func (s *Store) createPostgresSchema() error { _, err = s.db.Exec(` CREATE TABLE IF NOT EXISTS endpoint_result_conditions ( endpoint_result_condition_id BIGSERIAL PRIMARY KEY, - endpoint_result_id BIGINT REFERENCES endpoint_results(endpoint_result_id) ON DELETE CASCADE, - condition TEXT, - success BOOLEAN + endpoint_result_id BIGINT NOT NULL REFERENCES endpoint_results(endpoint_result_id) ON DELETE CASCADE, + condition TEXT NOT NULL, + success BOOLEAN NOT NULL ) `) if err != nil { @@ -58,15 +58,15 @@ func (s *Store) createPostgresSchema() error { _, err = s.db.Exec(` CREATE TABLE IF NOT EXISTS endpoint_uptimes ( endpoint_uptime_id BIGSERIAL PRIMARY KEY, - endpoint_id BIGINT REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, - hour_unix_timestamp BIGINT, - total_executions BIGINT, - successful_executions BIGINT, - total_response_time BIGINT, + endpoint_id BIGINT NOT NULL REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, + hour_unix_timestamp BIGINT NOT NULL, + total_executions BIGINT NOT NULL, + successful_executions BIGINT NOT NULL, + total_response_time BIGINT NOT NULL, UNIQUE(endpoint_id, hour_unix_timestamp) ) `) // Silent table modifications - _, _ = s.db.Exec(`ALTER TABLE endpoint_results ADD IF NOT EXISTS domain_expiration BIGINT`) + _, _ = s.db.Exec(`ALTER TABLE endpoint_results ADD IF NOT EXISTS domain_expiration BIGINT NOT NULL DEFAULT 0`) return err } diff --git a/storage/store/sql/specific_sqlite.go b/storage/store/sql/specific_sqlite.go index 45b06562..66b6eff2 100644 --- a/storage/store/sql/specific_sqlite.go +++ b/storage/store/sql/specific_sqlite.go @@ -5,8 +5,8 @@ func (s *Store) createSQLiteSchema() error { CREATE TABLE IF NOT EXISTS endpoints ( endpoint_id INTEGER PRIMARY KEY, endpoint_key TEXT UNIQUE, - endpoint_name TEXT, - endpoint_group TEXT, + endpoint_name TEXT NOT NULL, + endpoint_group TEXT NOT NULL, UNIQUE(endpoint_name, endpoint_group) ) `) @@ -16,9 +16,9 @@ func (s *Store) createSQLiteSchema() error { _, err = s.db.Exec(` CREATE TABLE IF NOT EXISTS endpoint_events ( endpoint_event_id INTEGER PRIMARY KEY, - endpoint_id INTEGER REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, - event_type TEXT, - event_timestamp TIMESTAMP + endpoint_id INTEGER NOT NULL REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, + event_type TEXT NOT NULL, + event_timestamp TIMESTAMP NOT NULL ) `) if err != nil { @@ -27,18 +27,18 @@ func (s *Store) createSQLiteSchema() error { _, err = s.db.Exec(` CREATE TABLE IF NOT EXISTS endpoint_results ( endpoint_result_id INTEGER PRIMARY KEY, - endpoint_id INTEGER REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, - success INTEGER, - errors TEXT, - connected INTEGER, - status INTEGER, - dns_rcode TEXT, - certificate_expiration INTEGER, - domain_expiration INTEGER, - hostname TEXT, - ip TEXT, - duration INTEGER, - timestamp TIMESTAMP + endpoint_id INTEGER NOT NULL REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, + success INTEGER NOT NULL, + errors TEXT NOT NULL, + connected INTEGER NOT NULL, + status INTEGER NOT NULL, + dns_rcode TEXT NOT NULL, + certificate_expiration INTEGER NOT NULL, + domain_expiration INTEGER NOT NULL, + hostname TEXT NOT NULL, + ip TEXT NOT NULL, + duration INTEGER NOT NULL, + timestamp TIMESTAMP NOT NULL ) `) if err != nil { @@ -47,9 +47,9 @@ func (s *Store) createSQLiteSchema() error { _, err = s.db.Exec(` CREATE TABLE IF NOT EXISTS endpoint_result_conditions ( endpoint_result_condition_id INTEGER PRIMARY KEY, - endpoint_result_id INTEGER REFERENCES endpoint_results(endpoint_result_id) ON DELETE CASCADE, - condition TEXT, - success INTEGER + endpoint_result_id INTEGER NOT NULL REFERENCES endpoint_results(endpoint_result_id) ON DELETE CASCADE, + condition TEXT NOT NULL, + success INTEGER NOT NULL ) `) if err != nil { @@ -58,15 +58,15 @@ func (s *Store) createSQLiteSchema() error { _, err = s.db.Exec(` CREATE TABLE IF NOT EXISTS endpoint_uptimes ( endpoint_uptime_id INTEGER PRIMARY KEY, - endpoint_id INTEGER REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, - hour_unix_timestamp INTEGER, - total_executions INTEGER, - successful_executions INTEGER, - total_response_time INTEGER, + endpoint_id INTEGER NOT NULL REFERENCES endpoints(endpoint_id) ON DELETE CASCADE, + hour_unix_timestamp INTEGER NOT NULL, + total_executions INTEGER NOT NULL, + successful_executions INTEGER NOT NULL, + total_response_time INTEGER NOT NULL, UNIQUE(endpoint_id, hour_unix_timestamp) ) `) - // Silent table modifications - _, _ = s.db.Exec(`ALTER TABLE endpoint_results ADD domain_expiration INTEGER`) + // Silent table modifications TODO: Remove this + _, _ = s.db.Exec(`ALTER TABLE endpoint_results ADD domain_expiration INTEGER NOT NULL DEFAULT 0`) return err } diff --git a/storage/store/sql/sql.go b/storage/store/sql/sql.go index 87a91cc8..1913af05 100644 --- a/storage/store/sql/sql.go +++ b/storage/store/sql/sql.go @@ -609,7 +609,11 @@ func (s *Store) getEndpointResultsByEndpointID(tx *sql.Tx, endpointID int64, pag result := &core.Result{} var id int64 var joinedErrors string - _ = rows.Scan(&id, &result.Success, &joinedErrors, &result.Connected, &result.HTTPStatus, &result.DNSRCode, &result.CertificateExpiration, &result.DomainExpiration, &result.Hostname, &result.IP, &result.Duration, &result.Timestamp) + err = rows.Scan(&id, &result.Success, &joinedErrors, &result.Connected, &result.HTTPStatus, &result.DNSRCode, &result.CertificateExpiration, &result.DomainExpiration, &result.Hostname, &result.IP, &result.Duration, &result.Timestamp) + if err != nil { + log.Printf("[sql][getEndpointResultsByEndpointID] Silently failed to retrieve endpoint result for endpointID=%d: %s", endpointID, err.Error()) + err = nil + } if len(joinedErrors) != 0 { result.Errors = strings.Split(joinedErrors, arraySeparator) }