You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@age.apache.org by ak...@apache.org on 2023/06/09 07:15:56 UTC

[age] branch ageviewer_go updated: [Ageviewer_go] Retrieve the graphs name when connecting to DB. (#962)

This is an automated email from the ASF dual-hosted git repository.

ako pushed a commit to branch ageviewer_go
in repository https://gitbox.apache.org/repos/asf/age.git


The following commit(s) were added to refs/heads/ageviewer_go by this push:
     new a12042f7 [Ageviewer_go] Retrieve the graphs name when connecting to DB. (#962)
a12042f7 is described below

commit a12042f75a26df82d29962d98d3304bdd018e375
Author: Kamlesh Kumar <95...@users.noreply.github.com>
AuthorDate: Fri Jun 9 12:15:50 2023 +0500

    [Ageviewer_go] Retrieve the graphs name when connecting to DB. (#962)
    
    * Function to disconnect database add to backend
    
    * Added functionalities to read query response dynamically
    
    * Meatdata functionalities changes to retrieve data of all graphs, rather a single graph
    
    * retrieve all graph names and first graph names when user connectes to db
---
 backend/APIfunctions.js      |  4 ++--
 backend/db/age.go            |  2 ++
 backend/main.go              |  4 ++--
 backend/models/connection.go |  5 ++---
 backend/models/graph.go      | 25 +++++++++++++++++++++++++
 backend/routes/connect.go    | 14 +++++++++++---
 6 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/backend/APIfunctions.js b/backend/APIfunctions.js
index d96bc2d7..cb6af52f 100644
--- a/backend/APIfunctions.js
+++ b/backend/APIfunctions.js
@@ -10,11 +10,11 @@ const rl = readline.createInterface({
 
 // Test data which will come from the frontend
 const conn = {
-  port: "5432",
+  port: 5432,
   host: "localhost",
   password: "Welcome@1",
   user: "kamleshk",
-  dbname: "demodb",
+  dbname: "testdb",
   ssl: "disable",
   graph_init: true,
   version: 11,
diff --git a/backend/db/age.go b/backend/db/age.go
index f826bbd6..aff51402 100644
--- a/backend/db/age.go
+++ b/backend/db/age.go
@@ -34,6 +34,8 @@ INNER JOIN ag_label as label
 ON label.name = q1.label
 AND label.graph = g.graphid;`
 
+const GET_ALL_GRAPHS = `SELECT DISTINCT(split_part(relation::text, '.', 1)) as graph_name FROM ag_catalog.ag_label;`
+
 const ANALYZE = `ANALYZE;`
 
 const PG_VERSION = `show server_version_num;`
diff --git a/backend/main.go b/backend/main.go
index 07614104..397b47fd 100644
--- a/backend/main.go
+++ b/backend/main.go
@@ -18,10 +18,10 @@ func main() {
 	app.Use(middleware.CORSWithConfig(middleware.CORSConfig{
 		AllowOrigins: []string{"*"},
 		AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept},
-	  }))
+	}))
 	gob.Register(models.Connection{})
 	app.Use(session.UserSessions())
-	
+
 	app.POST("/connect", routes.ConnectToDb)
 	app.GET("/status", routes.StatusDB)
 	app.POST("/disconnect", routes.DisconnectFromDb)
diff --git a/backend/models/connection.go b/backend/models/connection.go
index 3f2617a1..e8220446 100644
--- a/backend/models/connection.go
+++ b/backend/models/connection.go
@@ -18,9 +18,8 @@ type Connection struct {
 	SSL       string `default:"require"`
 	GraphInit bool
 	Version   int
-	Graphs	[]string
-	Graph    string
-
+	Graphs    []string
+	Graph     string
 }
 
 /*
diff --git a/backend/models/graph.go b/backend/models/graph.go
index 545bb182..07ed3357 100644
--- a/backend/models/graph.go
+++ b/backend/models/graph.go
@@ -33,3 +33,28 @@ func GetMetaData(conn *sql.DB, v int, dataChan chan<- *sql.Rows, errorChan chan<
 	errorChan <- err
 	dataChan <- data
 }
+
+// GetGraphNamesFromDB retrieves all unique graph names from the database
+// and returns a slice of graph names, the first graph name, and an error (if any).
+// The first graph name will be an empty string if there are no graph names.
+func GetGraphNamesFromDB(conn *sql.DB) ([]string, string, error) {
+	data, err := conn.Query(db.GET_ALL_GRAPHS)
+	if err != nil {
+		return nil, "", err
+	}
+	defer data.Close()
+	graphNames := make([]string, 0)
+	for data.Next() {
+		var graphName string
+		err := data.Scan(&graphName)
+		if err != nil {
+			return nil, "", err
+		}
+		graphNames = append(graphNames, graphName)
+	}
+	firstGraphName := ""
+	if len(graphNames) > 0 {
+		firstGraphName = graphNames[0]
+	}
+	return graphNames, firstGraphName, nil
+}
diff --git a/backend/routes/connect.go b/backend/routes/connect.go
index bac2e226..020c52d1 100644
--- a/backend/routes/connect.go
+++ b/backend/routes/connect.go
@@ -12,9 +12,8 @@ import (
 /*
 This function takes user data from the request body, establishes a database connection, saves the
 connection information in the session, and it returns a JSON response with fields
-containing the host, postgres version, port, database, user, password, list of graphs 
+containing the host, postgres version, port, database, user, password, list of graphs
 and current graph. It handles errors related to invalid data, connection establishment, and session saving.
-
 */
 func ConnectToDb(c echo.Context) error {
 	udata, err := models.FromRequestBody(c)
@@ -32,13 +31,22 @@ func ConnectToDb(c echo.Context) error {
 	}
 	defer db.Close()
 	sess := c.Get("database").(*sessions.Session)
-	udata.Graphs = []string{}
+
 	sess.Values["db"] = udata
 
+	// Call GetGraphNamesFromDB from the models package to retrieve
+	// the graph names and the first graph name from the database.
+	graphNames, firstGraphName, err := models.GetGraphNamesFromDB(db)
+	if err != nil {
+		return echo.NewHTTPError(400, fmt.Sprintf("could not retrieve graph names due to %s", err.Error()))
+	}
+
 	err = sess.Save(c.Request(), c.Response().Writer)
 	if err != nil {
 		return echo.NewHTTPError(400, "could not save session")
 	}
+	udata.Graphs = graphNames
+	udata.Graph = firstGraphName
 
 	return c.JSON(200, udata)
 }