OSDN Git Service

perf scripts python: call-graph-from-sql.py: Separate the database details into a...
authorAdrian Hunter <adrian.hunter@intel.com>
Mon, 1 Oct 2018 06:28:40 +0000 (09:28 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 23 Oct 2018 17:23:13 +0000 (14:23 -0300)
Separate the database details into a class that can provide different
connections using the same connection information.  That paves the way
for sub-processes that require their own connection.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/20181001062853.28285-7-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/scripts/python/call-graph-from-sql.py

index 2b74b94..9d056de 100644 (file)
@@ -284,6 +284,42 @@ class MainWindow(QMainWindow):
 
                self.setCentralWidget(self.view)
 
+# Database reference
+
+class DBRef():
+
+       def __init__(self, is_sqlite3, dbname):
+               self.is_sqlite3 = is_sqlite3
+               self.dbname = dbname
+
+       def Open(self, connection_name):
+               dbname = self.dbname
+               if self.is_sqlite3:
+                       db = QSqlDatabase.addDatabase("QSQLITE", connection_name)
+               else:
+                       db = QSqlDatabase.addDatabase("QPSQL", connection_name)
+                       opts = dbname.split()
+                       for opt in opts:
+                               if "=" in opt:
+                                       opt = opt.split("=")
+                                       if opt[0] == "hostname":
+                                               db.setHostName(opt[1])
+                                       elif opt[0] == "port":
+                                               db.setPort(int(opt[1]))
+                                       elif opt[0] == "username":
+                                               db.setUserName(opt[1])
+                                       elif opt[0] == "password":
+                                               db.setPassword(opt[1])
+                                       elif opt[0] == "dbname":
+                                               dbname = opt[1]
+                               else:
+                                       dbname = opt
+
+               db.setDatabaseName(dbname)
+               if not db.open():
+                       raise Exception("Failed to open database " + dbname + " error: " + db.lastError().text())
+               return db, dbname
+
 # Main
 
 def Main():
@@ -302,31 +338,8 @@ def Main():
        except:
                pass
 
-       if is_sqlite3:
-               db = QSqlDatabase.addDatabase('QSQLITE')
-       else:
-               db = QSqlDatabase.addDatabase('QPSQL')
-               opts = dbname.split()
-               for opt in opts:
-                       if '=' in opt:
-                               opt = opt.split('=')
-                               if opt[0] == 'hostname':
-                                       db.setHostName(opt[1])
-                               elif opt[0] == 'port':
-                                       db.setPort(int(opt[1]))
-                               elif opt[0] == 'username':
-                                       db.setUserName(opt[1])
-                               elif opt[0] == 'password':
-                                       db.setPassword(opt[1])
-                               elif opt[0] == 'dbname':
-                                       dbname = opt[1]
-                       else:
-                               dbname = opt
-
-       db.setDatabaseName(dbname)
-       if not db.open():
-               raise Exception("Failed to open database " + dbname + " error: " + db.lastError().text())
-
+       dbref = DBRef(is_sqlite3, dbname)
+       db, dbname = dbref.Open("main")
        app = QApplication(sys.argv)
        window = MainWindow(db, dbname)
        window.show()