| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package utils
- import (
- "database/sql"
- "fmt"
- "golang.org/x/text/cases"
- "golang.org/x/text/language"
- "github.com/opencost/opencost/pkg/env"
- )
- var ToTitle = cases.Title(language.Und, cases.NoLower)
- var createTableStatements = []string{
- `CREATE TABLE IF NOT EXISTS names (
- cluster_id VARCHAR(255) NOT NULL,
- cluster_name VARCHAR(255) NULL,
- PRIMARY KEY (cluster_id)
- );`,
- }
- // TODO: these don't really fit in this package, should they move
- // somewhere else?
- func UpdateClusterMeta(cluster_id, cluster_name string) error {
- pw := env.GetRemotePW()
- address := env.GetSQLAddress()
- connStr := fmt.Sprintf("postgres://postgres:%s@%s:5432?sslmode=disable", pw, address)
- db, err := sql.Open("postgres", connStr)
- if err != nil {
- return err
- }
- defer db.Close()
- updateStmt := `UPDATE names SET cluster_name = $1 WHERE cluster_id = $2;`
- _, err = db.Exec(updateStmt, cluster_name, cluster_id)
- if err != nil {
- return err
- }
- return nil
- }
- func CreateClusterMeta(cluster_id, cluster_name string) error {
- pw := env.GetRemotePW()
- address := env.GetSQLAddress()
- connStr := fmt.Sprintf("postgres://postgres:%s@%s:5432?sslmode=disable", pw, address)
- db, err := sql.Open("postgres", connStr)
- if err != nil {
- return err
- }
- defer db.Close()
- for _, stmt := range createTableStatements {
- _, err := db.Exec(stmt)
- if err != nil {
- return err
- }
- }
- insertStmt := `INSERT INTO names (cluster_id, cluster_name) VALUES ($1, $2);`
- _, err = db.Exec(insertStmt, cluster_id, cluster_name)
- if err != nil {
- return err
- }
- return nil
- }
- func GetClusterMeta(cluster_id string) (string, string, error) {
- pw := env.GetRemotePW()
- address := env.GetSQLAddress()
- connStr := fmt.Sprintf("postgres://postgres:%s@%s:5432?sslmode=disable", pw, address)
- db, err := sql.Open("postgres", connStr)
- if err != nil {
- return "", "", err
- }
- defer db.Close()
- query := `SELECT cluster_id, cluster_name
- FROM names
- WHERE cluster_id = ?`
- rows, err := db.Query(query, cluster_id)
- if err != nil {
- return "", "", err
- }
- defer rows.Close()
- var (
- sql_cluster_id string
- cluster_name string
- )
- for rows.Next() {
- if err := rows.Scan(&sql_cluster_id, &cluster_name); err != nil {
- return "", "", err
- }
- }
- return sql_cluster_id, cluster_name, nil
- }
- func GetOrCreateClusterMeta(cluster_id, cluster_name string) (string, string, error) {
- id, name, err := GetClusterMeta(cluster_id)
- if err != nil {
- err := CreateClusterMeta(cluster_id, cluster_name)
- if err != nil {
- return "", "", err
- }
- }
- if id == "" {
- err := CreateClusterMeta(cluster_id, cluster_name)
- if err != nil {
- return "", "", err
- }
- }
- return id, name, nil
- }
|