Skip to content

Commit

Permalink
Add rendered query for AppCat
Browse files Browse the repository at this point in the history
  • Loading branch information
Kidswiss committed Mar 10, 2023
1 parent e9a1d02 commit 04ad82e
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 84 deletions.
74 changes: 59 additions & 15 deletions pkg/db/seeds.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package db

import (
"bytes"
"database/sql"
"fmt"
"text/template"

_ "embed"

Expand All @@ -27,11 +29,8 @@ var appuioCloudPersistentStorageQuery string
//go:embed seeds/appuio_managed_openshift_vcpu.promql
var appuioManagedOpenShiftvCPUQuery string

//go:embed seeds/appcat_postgresql_vshn_standalone.promql
var appcatPostgresqlVSHNStandalone string

//go:embed seeds/appcat_redis_vshn_standalone.promql
var appcatRedisVSHNStandalone string
//go:embed seeds/appcat_vshn.promql.tmpl
var appcatVSHNTemplate string

// DefaultQueries consists of default starter queries.
var DefaultQueries = []Query{
Expand Down Expand Up @@ -72,34 +71,57 @@ var DefaultQueries = []Query{
Query: appuioManagedOpenShiftvCPUQuery,
Unit: "vCPU",
},
}

var renderedQueries = []RenderedQuery{
{
Name: "appcat_postgresql_vshn_standalone",
Description: "Number of VSHN managed standalone postgres instances",
Query: appcatPostgresqlVSHNStandalone,
Unit: "Instances",
Query: Query{
Name: "appcat_postgresql_vshn_standalone",
Description: "Number of VSHN managed standalone postgres instances",
Unit: "Instances",
},
ProductName: "postgres",
ServiceName: "postgresql-standalone",
Template: appcatVSHNTemplate,
},
{
Name: "appcat_redis_vshn_standalone",
Description: "Number of VSHN managed standalone redis instances",
Query: appcatRedisVSHNStandalone,
Unit: "Instances",
Query: Query{
Name: "appcat_redis_vshn_standalone",
Description: "Number of VSHN managed standalone redis instances",
Unit: "Instances",
},
ProductName: "redis",
ServiceName: "redis-standalone",
Template: appcatVSHNTemplate,
},
}

type RenderedQuery struct {
Query
ProductName string
ServiceName string
Template string
}

// Seed seeds the database with "starter" data.
// Is idempotent and thus can be executed multiple times in one database.
func Seed(db *sql.DB) error {
return SeedQueries(db, DefaultQueries)
return SeedQueries(db, DefaultQueries, renderedQueries)
}

func SeedQueries(db *sql.DB, queries []Query) error {
func SeedQueries(db *sql.DB, queries []Query, RenderedQueries []RenderedQuery) error {
dbx := NewDBx(db)
tx, err := dbx.Beginx()
if err != nil {
return err
}
defer tx.Rollback()

queries, err = addRenderedQueries(queries, RenderedQueries)
if err != nil {
return err
}

if err := createQueries(tx, queries); err != nil {
return err
}
Expand Down Expand Up @@ -152,3 +174,25 @@ func queryExistsByName(tx *sqlx.Tx, name string) (bool, error) {
err := tx.Get(&exists, "SELECT EXISTS(SELECT 1 FROM queries WHERE name = $1)", name)
return exists, err
}

func addRenderedQueries(queries []Query, renderenderedQueries []RenderedQuery) ([]Query, error) {
for _, query := range renderenderedQueries {
rendered, err := renderQuery(query)
if err != nil {
return nil, err
}
query.Query.Query = rendered
queries = append(queries, query.Query)
}
return queries, nil
}

func renderQuery(query RenderedQuery) (string, error) {
tmpl, err := template.New("AppCatService").Parse(query.Template)
if err != nil {
return "", err
}
buffer := &bytes.Buffer{}
err = tmpl.Execute(buffer, query)
return buffer.String(), err
}
64 changes: 0 additions & 64 deletions pkg/db/seeds/appcat_postgresql_vshn_standalone.promql

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ sum_over_time(
label_replace(
# Copy label appuio.io/organization to label tenant_id
label_replace(
# Fetch all namespaces with label appcat.vshn.io/servicename="redis-standalone"
kube_namespace_labels{label_appuio_io_organization=~".+", label_appcat_vshn_io_servicename="redis-standalone"},
# Fetch all namespaces with label appcat.vshn.io/servicename="{{.ServiceName}}"
kube_namespace_labels{label_appuio_io_organization=~".+", label_appcat_vshn_io_servicename="{{.ServiceName}}"},
"tenant_id",
"$1",
"label_appuio_io_organization",
Expand All @@ -34,7 +34,7 @@ sum_over_time(
"^$"
),
"product",
"redis",
"{{.ProductName}}",
"",
""
),
Expand Down
4 changes: 2 additions & 2 deletions pkg/db/seeds_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func (s *SeedsTestSuite) TestSeedDefaultQueries() {
_, err := d.Exec("DELETE FROM queries")
require.NoError(t, err)

expQueryNum := 7
expQueryNum := 8

count := "SELECT COUNT(*) FROM queries"
requireQueryEqual(t, d, 0, count)
Expand All @@ -33,7 +33,7 @@ func (s *SeedsTestSuite) TestSeedDefaultQueries() {
Description: "Memory usage (maximum of requested and used memory) aggregated by namespace",
Unit: "MiB",
},
}))
}, []db.RenderedQuery{}))
t.Log(t, count)
requireQueryEqual(t, d, 1, count)

Expand Down

0 comments on commit 04ad82e

Please sign in to comment.