Skip to content

Commit 4c9d45c

Browse files
committed
feat: Added logs for schemaReader, schemaWriter, tenantReader, tenantWriter and watch.
1 parent a367d87 commit 4c9d45c

File tree

5 files changed

+197
-0
lines changed

5 files changed

+197
-0
lines changed

internal/storage/postgres/schemaReader.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"database/sql"
66
"errors"
77

8+
"log/slog"
9+
810
"github.com/Masterminds/squirrel"
911
"go.opentelemetry.io/otel/codes"
1012

@@ -34,6 +36,8 @@ func (r *SchemaReader) ReadSchema(ctx context.Context, tenantID, version string)
3436
ctx, span := tracer.Start(ctx, "schema-reader.read-schema")
3537
defer span.End()
3638

39+
slog.Info("Reading schema: ", slog.Any("tenant_id", tenantID), slog.Any("version", version))
40+
3741
builder := r.database.Builder.Select("name, serialized_definition, version").From(SchemaDefinitionTable).Where(squirrel.Eq{"version": version, "tenant_id": tenantID})
3842

3943
var query string
@@ -43,14 +47,22 @@ func (r *SchemaReader) ReadSchema(ctx context.Context, tenantID, version string)
4347
if err != nil {
4448
span.RecordError(err)
4549
span.SetStatus(codes.Error, err.Error())
50+
51+
slog.Error("Error in building SQL query: ", slog.Any("error", err))
52+
4653
return nil, errors.New(base.ErrorCode_ERROR_CODE_SQL_BUILDER.String())
4754
}
4855

56+
slog.Debug("Executing SQL query: ", slog.Any("query", query), slog.Any("arguments", args))
57+
4958
var rows *sql.Rows
5059
rows, err = r.database.DB.QueryContext(ctx, query, args...)
5160
if err != nil {
5261
span.RecordError(err)
5362
span.SetStatus(codes.Error, err.Error())
63+
64+
slog.Error("Error in executing query: ", slog.Any("error", err))
65+
5466
return nil, errors.New(base.ErrorCode_ERROR_CODE_EXECUTION.String())
5567
}
5668
defer rows.Close()
@@ -62,23 +74,36 @@ func (r *SchemaReader) ReadSchema(ctx context.Context, tenantID, version string)
6274
if err != nil {
6375
span.RecordError(err)
6476
span.SetStatus(codes.Error, err.Error())
77+
78+
slog.Error("Error scanning rows: ", slog.Any("error", err))
79+
6580
return nil, err
6681
}
6782
definitions = append(definitions, sd.Serialized())
6883
}
6984
if err = rows.Err(); err != nil {
7085
span.RecordError(err)
7186
span.SetStatus(codes.Error, err.Error())
87+
88+
slog.Error("Error iterating over rows: ", slog.Any("error", err))
89+
7290
return nil, err
7391
}
7492

93+
slog.Info("Successfully retrieved", slog.Any("schema definitions", len(definitions)))
94+
7595
sch, err = schema.NewSchemaFromStringDefinitions(false, definitions...)
7696
if err != nil {
7797
span.RecordError(err)
7898
span.SetStatus(codes.Error, err.Error())
99+
100+
slog.Error("Failed while creating schema from definitions: ", slog.Any("error", err))
101+
79102
return nil, err
80103
}
81104

105+
slog.Info("Successfully created schema.")
106+
82107
return sch, err
83108
}
84109

@@ -87,6 +112,8 @@ func (r *SchemaReader) ReadEntityDefinition(ctx context.Context, tenantID, name,
87112
ctx, span := tracer.Start(ctx, "schema-reader.read-entity-definition")
88113
defer span.End()
89114

115+
slog.Info("Reading entity definition: ", slog.Any("tenant_id", tenantID), slog.Any("version", version))
116+
90117
builder := r.database.Builder.Select("name, serialized_definition, version").Where(squirrel.Eq{"name": name, "version": version, "tenant_id": tenantID}).From(SchemaDefinitionTable).Limit(1)
91118

92119
var query string
@@ -96,14 +123,22 @@ func (r *SchemaReader) ReadEntityDefinition(ctx context.Context, tenantID, name,
96123
if err != nil {
97124
span.RecordError(err)
98125
span.SetStatus(codes.Error, err.Error())
126+
127+
slog.Error("Error building SQL query: ", slog.Any("error", err))
128+
99129
return nil, "", errors.New(base.ErrorCode_ERROR_CODE_SQL_BUILDER.String())
100130
}
101131

132+
slog.Debug("Executing SQL query: ", slog.Any("query", query), slog.Any("arguments", args))
133+
102134
var def storage.SchemaDefinition
103135
row := r.database.DB.QueryRowContext(ctx, query, args...)
104136
if err = row.Err(); err != nil {
105137
span.RecordError(err)
106138
span.SetStatus(codes.Error, err.Error())
139+
140+
slog.Error("Error executing query: ", slog.Any("error", err))
141+
107142
return nil, "", errors.New(base.ErrorCode_ERROR_CODE_EXECUTION.String())
108143
}
109144

@@ -113,6 +148,9 @@ func (r *SchemaReader) ReadEntityDefinition(ctx context.Context, tenantID, name,
113148
if errors.Is(err, sql.ErrNoRows) {
114149
return nil, "", errors.New(base.ErrorCode_ERROR_CODE_SCHEMA_NOT_FOUND.String())
115150
}
151+
152+
slog.Error("Error scanning rows: ", slog.Any("error", err))
153+
116154
return nil, "", errors.New(base.ErrorCode_ERROR_CODE_SCAN.String())
117155
}
118156

@@ -121,10 +159,16 @@ func (r *SchemaReader) ReadEntityDefinition(ctx context.Context, tenantID, name,
121159
if err != nil {
122160
span.RecordError(err)
123161
span.SetStatus(codes.Error, err.Error())
162+
163+
slog.Error("Failed while creating schema from definitions: ", slog.Any("error", err))
164+
124165
return nil, "", err
125166
}
126167

127168
definition, err = schema.GetEntityByName(sch, name)
169+
170+
slog.Info("Successfully retrieved", slog.Any("schema definition", definition))
171+
128172
return definition, def.Version, err
129173
}
130174

@@ -133,6 +177,8 @@ func (r *SchemaReader) ReadRuleDefinition(ctx context.Context, tenantID, name, v
133177
ctx, span := tracer.Start(ctx, "schema-reader.read-rule-definition")
134178
defer span.End()
135179

180+
slog.Info("Reading rule definition: ", slog.Any("tenant_id", tenantID), slog.Any("name", name), slog.Any("version", version))
181+
136182
builder := r.database.Builder.Select("name, serialized_definition, version").Where(squirrel.Eq{"name": name, "version": version, "tenant_id": tenantID}).From(SchemaDefinitionTable).Limit(1)
137183

138184
var query string
@@ -142,35 +188,59 @@ func (r *SchemaReader) ReadRuleDefinition(ctx context.Context, tenantID, name, v
142188
if err != nil {
143189
span.RecordError(err)
144190
span.SetStatus(codes.Error, err.Error())
191+
192+
slog.Error("Error building SQL query: ", slog.Any("error", err))
193+
145194
return nil, "", errors.New(base.ErrorCode_ERROR_CODE_SQL_BUILDER.String())
146195
}
147196

197+
slog.Debug("Executing SQL query: ", slog.Any("query", query), slog.Any("arguments", args))
198+
148199
var def storage.SchemaDefinition
149200
row := r.database.DB.QueryRowContext(ctx, query, args...)
150201
if err = row.Err(); err != nil {
151202
span.RecordError(err)
152203
span.SetStatus(codes.Error, err.Error())
204+
205+
slog.Error("Error executing query: ", slog.Any("error", err))
206+
153207
return nil, "", errors.New(base.ErrorCode_ERROR_CODE_EXECUTION.String())
154208
}
155209

156210
if err = row.Scan(&def.Name, &def.SerializedDefinition, &def.Version); err != nil {
211+
212+
slog.Error("Error scanning row: ", slog.Any("error", err))
213+
157214
span.RecordError(err)
158215
span.SetStatus(codes.Error, err.Error())
159216
if errors.Is(err, sql.ErrNoRows) {
217+
218+
slog.Error("Rule not found in the database")
219+
160220
return nil, "", errors.New(base.ErrorCode_ERROR_CODE_SCHEMA_NOT_FOUND.String())
161221
}
222+
223+
slog.Error("Error scanning row values: ", slog.Any("error", err))
224+
162225
return nil, "", errors.New(base.ErrorCode_ERROR_CODE_SCAN.String())
163226
}
164227

228+
slog.Info("Successfully retrieved rule definition for: ", slog.Any("name", name))
229+
165230
var sch *base.SchemaDefinition
166231
sch, err = schema.NewSchemaFromStringDefinitions(false, def.Serialized())
167232
if err != nil {
168233
span.RecordError(err)
169234
span.SetStatus(codes.Error, err.Error())
235+
236+
slog.Error("Error creating schema from definition: ", slog.Any("error", err))
237+
170238
return nil, "", err
171239
}
172240

173241
definition, err = schema.GetRuleByName(sch, name)
242+
slog.Info("Successfully created rule definition")
243+
174244
return definition, def.Version, err
175245
}
176246

@@ -179,26 +249,45 @@ func (r *SchemaReader) HeadVersion(ctx context.Context, tenantID string) (versio
179249
ctx, span := tracer.Start(ctx, "schema-reader.head-version")
180250
defer span.End()
181251

252+
slog.Info("Finding the latest version fo the schema for: ", slog.String("tenant_id", tenantID))
253+
182254
var query string
183255
var args []interface{}
184256
query, args, err = r.database.Builder.
185257
Select("version").From(SchemaDefinitionTable).Where(squirrel.Eq{"tenant_id": tenantID}).OrderBy("version DESC").Limit(1).
186258
ToSql()
187259
if err != nil {
260+
261+
slog.Error("Failed to build SQL query: ", slog.Any("error", err))
262+
188263
span.RecordError(err)
189264
span.SetStatus(codes.Error, err.Error())
190265
return "", errors.New(base.ErrorCode_ERROR_CODE_SQL_BUILDER.String())
191266
}
267+
268+
slog.Debug("Executing SQL query: ", slog.Any("query", query), slog.Any("arguments", args))
269+
192270
row := r.database.DB.QueryRowContext(ctx, query, args...)
193271
err = row.Scan(&version)
194272
if err != nil {
273+
274+
slog.Error("Error while scanning row: ", slog.Any("error", err))
275+
195276
span.RecordError(err)
196277
span.SetStatus(codes.Error, err.Error())
197278
if errors.Is(err, sql.ErrNoRows) {
279+
280+
slog.Error("Schema not found in the database.")
281+
198282
return "", errors.New(base.ErrorCode_ERROR_CODE_SCHEMA_NOT_FOUND.String())
199283
}
284+
285+
slog.Error("Error while scanning row values: ", slog.Any("error", err))
286+
200287
return "", err
201288
}
202289

290+
slog.Info("Successfully found the latest schema version: ", slog.Any("version", version))
291+
203292
return version, nil
204293
}

internal/storage/postgres/schemaWriter.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"database/sql"
66
"errors"
7+
"log/slog"
78

89
otelCodes "go.opentelemetry.io/otel/codes"
910

@@ -32,6 +33,8 @@ func (w *SchemaWriter) WriteSchema(ctx context.Context, schemas []storage.Schema
3233
ctx, span := tracer.Start(ctx, "schema-writer.write-schema")
3334
defer span.End()
3435

36+
slog.Info("Writing schemas to the database", slog.Any("number_of_schemas", len(schemas)))
37+
3538
insertBuilder := w.database.Builder.Insert(SchemaDefinitionTable).Columns("name, serialized_definition, version, tenant_id")
3639

3740
for _, schema := range schemas {
@@ -43,17 +46,27 @@ func (w *SchemaWriter) WriteSchema(ctx context.Context, schemas []storage.Schema
4346

4447
query, args, err = insertBuilder.ToSql()
4548
if err != nil {
49+
50+
slog.Error("Error while building SQL query: ", slog.Any("error", err))
51+
4652
span.RecordError(err)
4753
span.SetStatus(otelCodes.Error, err.Error())
4854
return errors.New(base.ErrorCode_ERROR_CODE_SQL_BUILDER.String())
4955
}
5056

57+
slog.Debug("Executing SQL insert query: ", slog.Any("query", query), slog.Any("arguments", args))
58+
5159
_, err = w.database.DB.ExecContext(ctx, query, args...)
5260
if err != nil {
61+
62+
slog.Error("Failed to execute insert query: ", slog.Any("error", err))
63+
5364
span.RecordError(err)
5465
span.SetStatus(otelCodes.Error, err.Error())
5566
return err
5667
}
5768

69+
slog.Info("Successfully wrote schemas to the database. ", slog.Any("number_of_schemas", len(schemas)))
70+
5871
return nil
5972
}

internal/storage/postgres/tenantReader.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"database/sql"
66
"errors"
77

8+
"log/slog"
9+
810
"github.com/Masterminds/squirrel"
911
"go.opentelemetry.io/otel/codes"
1012

@@ -34,11 +36,16 @@ func (r *TenantReader) ListTenants(ctx context.Context, pagination database.Pagi
3436
ctx, span := tracer.Start(ctx, "tenant-reader.list-tenants")
3537
defer span.End()
3638

39+
slog.Info("Listing tenants with pagination: ", slog.Any("pagination", pagination))
40+
3741
builder := r.database.Builder.Select("id, name, created_at").From(TenantsTable)
3842
if pagination.Token() != "" {
3943
var t database.ContinuousToken
4044
t, err = utils.EncodedContinuousToken{Value: pagination.Token()}.Decode()
4145
if err != nil {
46+
47+
slog.Error("Failed to decode pagination token. ", slog.Any("error", err))
48+
4249
span.RecordError(err)
4350
span.SetStatus(codes.Error, err.Error())
4451
return nil, nil, err
@@ -55,14 +62,22 @@ func (r *TenantReader) ListTenants(ctx context.Context, pagination database.Pagi
5562
if err != nil {
5663
span.RecordError(err)
5764
span.SetStatus(codes.Error, err.Error())
65+
66+
slog.Error("Error while building SQL query: ", slog.Any("error", err))
67+
5868
return nil, nil, errors.New(base.ErrorCode_ERROR_CODE_SQL_BUILDER.String())
5969
}
6070

71+
slog.Debug("Executing SQL query: ", slog.Any("query", query), slog.Any("arguments", args))
72+
6173
var rows *sql.Rows
6274
rows, err = r.database.DB.QueryContext(ctx, query, args...)
6375
if err != nil {
6476
span.RecordError(err)
6577
span.SetStatus(codes.Error, err.Error())
78+
79+
slog.Error("Failed to execute query: ", slog.Any("error", err))
80+
6681
return nil, nil, errors.New(base.ErrorCode_ERROR_CODE_EXECUTION.String())
6782
}
6883
defer rows.Close()
@@ -75,6 +90,9 @@ func (r *TenantReader) ListTenants(ctx context.Context, pagination database.Pagi
7590
if err != nil {
7691
span.RecordError(err)
7792
span.SetStatus(codes.Error, err.Error())
93+
94+
slog.Error("Failed to scan rows: ", slog.Any("error", err))
95+
7896
return nil, nil, err
7997
}
8098
lastID = sd.ID
@@ -83,12 +101,21 @@ func (r *TenantReader) ListTenants(ctx context.Context, pagination database.Pagi
83101
if err = rows.Err(); err != nil {
84102
span.RecordError(err)
85103
span.SetStatus(codes.Error, err.Error())
104+
105+
slog.Error("Error iterating over rows: ", slog.Any("error", err))
106+
86107
return nil, nil, err
87108
}
88109

110+
slog.Info("Successfully listed tenants. ", slog.Any("number_of_tenants", len(tenants)))
111+
89112
if len(tenants) > int(pagination.PageSize()) {
113+
114+
slog.Info("Returning tenants with a continuous token. ", slog.Any("page_size", pagination.PageSize()))
90115
return tenants[:pagination.PageSize()], utils.NewContinuousToken(lastID).Encode(), nil
91116
}
92117

118+
slog.Info("Returning all tenants with no continuous token.")
119+
93120
return tenants, database.NewNoopContinuousToken().Encode(), nil
94121
}

0 commit comments

Comments
 (0)