...
1
2
3 package edgesql
4
5 import (
6 "database/sql"
7 "fmt"
8
9 "edge-infra.dev/pkg/lib/gcp/cloudsql"
10 )
11
12
13
14 type EdgeCluster struct {
15 ClusterEdgeID string
16 ClusterName string
17 ProjectID string
18 BannerEdgeID string
19 BannerName string
20 }
21 type SQLConfig struct {
22 Host string
23 User string
24 DbName string
25 DbPassword string
26 }
27
28 var (
29 GetClusterByID = `
30 SELECT clusters.cluster_edge_id,
31 clusters.cluster_name,
32 clusters.project_id,
33 banners.banner_edge_id,
34 banners.banner_name
35 FROM clusters
36 JOIN banners ON banners.banner_edge_id = clusters.banner_edge_id
37 WHERE clusters.cluster_edge_id = $1
38 `
39 )
40
41
42 func (s *SQLConfig) createSQLDBConnection() (*sql.DB, error) {
43 return cloudsql.GCPPostgresConnection(s.Host).
44 DBName(s.DbName).
45 Password(s.DbPassword).
46 Username(s.User).
47 NewConnection()
48 }
49
50 func (s *SQLConfig) CheckConnection() (*sql.DB, error) {
51 db, err := s.createSQLDBConnection()
52 if err != nil {
53 panic(err)
54 }
55 return db, err
56 }
57
58
59
60
61 func ClusterByClusterID(db *sql.DB, clusterID string) (EdgeCluster, error) {
62 cluster := EdgeCluster{}
63 rows, err := db.Query(GetClusterByID, clusterID)
64 if err != nil {
65 return cluster, fmt.Errorf("error getting cluster by clusterID using id %s: %v", clusterID, err)
66 }
67 defer rows.Close()
68
69 var clusterEdgeID, clusterName, projectID, bannerEdgeID, bannerName string
70
71 for rows.Next() {
72 err := rows.Scan(&clusterEdgeID, &clusterName, &projectID, &bannerEdgeID, &bannerName)
73 if err != nil {
74 return cluster, err
75 }
76 cluster.ClusterEdgeID = clusterEdgeID
77 cluster.ClusterName = clusterName
78 cluster.ProjectID = projectID
79 cluster.BannerEdgeID = bannerEdgeID
80 cluster.BannerName = bannerName
81
82
83 if err := rows.Err(); err != nil {
84 return cluster, err
85 }
86 }
87
88 return cluster, nil
89 }
90
View as plain text