diff --git a/src/clarity/clarity-database.go b/src/clarity/clarity-database.go
deleted file mode 100644
index 059e100..0000000
--- a/src/clarity/clarity-database.go
+++ /dev/null
@@ -1 +0,0 @@
-package clarity
diff --git a/src/mercury.go b/src/mercury.go
index 29ec7e8..b66c100 100644
--- a/src/mercury.go
+++ b/src/mercury.go
@@ -3,7 +3,7 @@ package main
import (
"log"
"mercury/src/mercury"
- "mercury/src/projectInsight"
+ "mercury/src/projectClarity"
"os"
"time"
)
@@ -15,21 +15,19 @@ func main() {
//icx.InsightDBConnector.ExecuteSqlScript("insight", "create-insight-contribution-table.sql")
//processQbBilling()
- updateInsightData()
- //test()
+ //updateInsightData()
+ test()
f := time.Now()
- log.Println(f.Sub(s).Microseconds())
+ log.Println(f.Sub(s).Milliseconds())
}
func test() {
- //clarity.NewSnitch().Test()
- insightThing := projectInsight.NewDBConnection()
- res := insightThing.ReadEngineerUsers()
- for _, usr := range *res {
- log.Println(usr.EmailAddress)
+ db := projectClarity.NewClarityDatabase()
+ events := db.GetLifecycleEvents()
+ for _, event := range *events {
+ log.Printf("%#v\n", *event)
}
-
}
func updateInsightData() {
@@ -43,7 +41,7 @@ func processQbBilling() {
reportBase := os.Getenv("mercury_qb_path")
log.Printf("Searching for documents in %s\n", reportBase)
if len(reportBase) == 0 {
- log.Fatalln("please set the mercury_path env var. we don't know where to look otherwise")
+ log.Fatalln("please set the mercury_qb_path env var. we don't know where to look otherwise")
}
mercury.ProcessTrialBalances(reportBase, "./updateInsightData.csv")
diff --git a/src/projectClarity/clarity-database.go b/src/projectClarity/clarity-database.go
new file mode 100644
index 0000000..2f2ffa3
--- /dev/null
+++ b/src/projectClarity/clarity-database.go
@@ -0,0 +1,55 @@
+package projectClarity
+
+import (
+ "database/sql"
+ "log"
+ "mercury/src/util"
+ "time"
+)
+
+const (
+ ClarityDatabaseName = "projects"
+)
+
+type (
+ ClarityLifeCycleEvent struct {
+ Id int64
+ ProjectNumber string
+ Timestamp time.Time
+ ChangedColumn string
+ PreviousValue string
+ NewValue string
+ Modifier int32
+ }
+)
+
+//
+/*======================================================================================
+ ClarityDatabase
+======================================================================================*/
+
+type clarityDatabase struct {
+ *util.DBConnectorGeneric
+}
+
+func NewClarityDatabase() *clarityDatabase {
+ return &clarityDatabase{&util.DBConnectorGeneric{}}
+}
+
+func (cdb *clarityDatabase) GetProjects() {
+
+}
+
+func (cdb *clarityDatabase) GetLifecycleEvents() *[]*ClarityLifeCycleEvent {
+ cb := func(rows *sql.Rows) *ClarityLifeCycleEvent {
+ container := ClarityLifeCycleEvent{}
+ err := rows.Scan(&container.Id, &container.ProjectNumber, &container.Timestamp, &container.ChangedColumn, &container.PreviousValue, &container.NewValue, &container.Modifier)
+ if err != nil {
+ log.Panicln(err)
+ }
+ return &container
+ }
+ return util.QueryForObjects[ClarityLifeCycleEvent](cdb.DBConnectorGeneric, ClarityDatabaseName, "read-clarity-lifecycleEvents.sql", cb)
+}
+
+//
diff --git a/src/clarity/s3connect.go b/src/projectClarity/s3connect.go
similarity index 96%
rename from src/clarity/s3connect.go
rename to src/projectClarity/s3connect.go
index d7d7f7d..04153a0 100644
--- a/src/clarity/s3connect.go
+++ b/src/projectClarity/s3connect.go
@@ -1,4 +1,4 @@
-package clarity
+package projectClarity
import (
"github.com/aws/aws-sdk-go/aws"
diff --git a/src/clarity/snitch.go b/src/projectClarity/snitch.go
similarity index 92%
rename from src/clarity/snitch.go
rename to src/projectClarity/snitch.go
index 92e956d..cd019b1 100644
--- a/src/clarity/snitch.go
+++ b/src/projectClarity/snitch.go
@@ -1,4 +1,4 @@
-package clarity
+package projectClarity
import (
"log"
@@ -14,12 +14,11 @@ type Snitch struct {
DB projectInsight.InsightDBConnector
}
-//func NewSnitch() *Snitch {
-// return &Snitch{}
-//}
+func NewSnitch() *Snitch {
+ return &Snitch{}
+}
func (s *Snitch) Test() {
-
res := GetS3ListingForKey("us-east-1", "jds.private.rdu.str", "RDU2201010/")
for _, thing := range *res {
diff --git a/src/sql/read-clarity-lifecycleEvents.sql b/src/sql/read-clarity-lifecycleEvents.sql
new file mode 100644
index 0000000..19c0ed2
--- /dev/null
+++ b/src/sql/read-clarity-lifecycleEvents.sql
@@ -0,0 +1,5 @@
+SELECT *
+FROM project_lifecycle
+WHERE changed_column = 'status'
+ AND new_value = '+READY_FOR_REVIEW'
+ AND timestamp > now() - INTERVAL 2 MONTH;
\ No newline at end of file
diff --git a/src/util/database-primitives.go b/src/util/database-primitives.go
index bfe7c16..01517cb 100644
--- a/src/util/database-primitives.go
+++ b/src/util/database-primitives.go
@@ -12,6 +12,7 @@ import (
const (
dbCredsEnvName = "DB_CREDS"
dbCredsHostName = "DB_HOST"
+ dsnTemplate = "clarity:%s@tcp(%s)/%s?parseTime=true"
)
//
@@ -24,8 +25,8 @@ type DBConnectorGeneric struct {
}
func (c *DBConnectorGeneric) ExecuteSqlScript(database string, scriptName string) {
- c.StartConnection(database)
- defer c.ReturnConnection()
+ c.startConnection(database)
+ defer c.returnConnection()
queryWhole := *loadSqlFile(scriptName)
queryParts := strings.Split(queryWhole, ";")
@@ -43,12 +44,14 @@ func (c *DBConnectorGeneric) ExecuteSqlScript(database string, scriptName string
}
}
-func (c *DBConnectorGeneric) StartConnection(dataBase string) {
+// startConnection this initializes, caches, and returns a connection for the desired database
+func (c *DBConnectorGeneric) startConnection(dataBase string) {
db := createDbConnection(dataBase)
c.cachedConnection = db
}
-func (c *DBConnectorGeneric) ReturnConnection() {
+// returnConnection This just closes the cached db connection
+func (c *DBConnectorGeneric) returnConnection() {
err := c.cachedConnection.Close()
if err != nil {
log.Panic(err)
@@ -75,7 +78,7 @@ func (c *DBConnectorGeneric) QueryFromScript(scriptName string) *sql.Rows {
func createDbConnection(database string) *sql.DB {
cred := os.Getenv(dbCredsEnvName)
host := os.Getenv(dbCredsHostName)
- dbString := "clarity:%s@tcp(%s)/%s"
+ dbString := dsnTemplate
connectString := fmt.Sprintf(dbString, cred, host, database)
db, err := sql.Open("mysql", connectString)
@@ -101,8 +104,8 @@ func loadSqlFile(scriptName string) *string {
func QueryForObjects[K any](db *DBConnectorGeneric, dbName string, queryScript string, mapping func(rows *sql.Rows) *K) *[]*K {
rs := make([]*K, 0, 10000)
- db.StartConnection(dbName)
- defer db.ReturnConnection()
+ db.startConnection(dbName)
+ defer db.returnConnection()
res := db.QueryFromScript(queryScript)
for res.Next() {
@@ -114,8 +117,8 @@ func QueryForObjects[K any](db *DBConnectorGeneric, dbName string, queryScript s
}
func BulkUpdate[K any](db *DBConnectorGeneric, dbName string, updateScript string, items *[]*K, mapping func(s *sql.Stmt, item *K)) {
- db.StartConnection(dbName)
- defer db.ReturnConnection()
+ db.startConnection(dbName)
+ defer db.returnConnection()
statement := loadSqlFile(updateScript)
s, err := db.cachedConnection.Prepare(*statement)
if err != nil {