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 {