beginning work on picture timestamp correlation

master
dtookey 4 years ago
parent dc6ba5a8ce
commit 26c4ba93d3

@ -3,7 +3,7 @@ package main
import ( import (
"log" "log"
"mercury/src/mercury" "mercury/src/mercury"
"mercury/src/projectInsight" "mercury/src/projectClarity"
"os" "os"
"time" "time"
) )
@ -15,21 +15,19 @@ func main() {
//icx.InsightDBConnector.ExecuteSqlScript("insight", "create-insight-contribution-table.sql") //icx.InsightDBConnector.ExecuteSqlScript("insight", "create-insight-contribution-table.sql")
//processQbBilling() //processQbBilling()
updateInsightData() //updateInsightData()
//test() test()
f := time.Now() f := time.Now()
log.Println(f.Sub(s).Microseconds()) log.Println(f.Sub(s).Milliseconds())
} }
func test() { func test() {
//clarity.NewSnitch().Test() db := projectClarity.NewClarityDatabase()
insightThing := projectInsight.NewDBConnection() events := db.GetLifecycleEvents()
res := insightThing.ReadEngineerUsers() for _, event := range *events {
for _, usr := range *res { log.Printf("%#v\n", *event)
log.Println(usr.EmailAddress)
} }
} }
func updateInsightData() { func updateInsightData() {
@ -43,7 +41,7 @@ func processQbBilling() {
reportBase := os.Getenv("mercury_qb_path") reportBase := os.Getenv("mercury_qb_path")
log.Printf("Searching for documents in %s\n", reportBase) log.Printf("Searching for documents in %s\n", reportBase)
if len(reportBase) == 0 { 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") mercury.ProcessTrialBalances(reportBase, "./updateInsightData.csv")

@ -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
}
)
//<editor-fold name="ClarityDatabase">
/*======================================================================================
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)
}
//</editor-fold>

@ -1,4 +1,4 @@
package clarity package projectClarity
import ( import (
"github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws"

@ -1,4 +1,4 @@
package clarity package projectClarity
import ( import (
"log" "log"
@ -14,12 +14,11 @@ type Snitch struct {
DB projectInsight.InsightDBConnector DB projectInsight.InsightDBConnector
} }
//func NewSnitch() *Snitch { func NewSnitch() *Snitch {
// return &Snitch{} return &Snitch{}
//} }
func (s *Snitch) Test() { func (s *Snitch) Test() {
res := GetS3ListingForKey("us-east-1", "jds.private.rdu.str", "RDU2201010/") res := GetS3ListingForKey("us-east-1", "jds.private.rdu.str", "RDU2201010/")
for _, thing := range *res { for _, thing := range *res {

@ -0,0 +1,5 @@
SELECT *
FROM project_lifecycle
WHERE changed_column = 'status'
AND new_value = '+READY_FOR_REVIEW'
AND timestamp > now() - INTERVAL 2 MONTH;

@ -12,6 +12,7 @@ import (
const ( const (
dbCredsEnvName = "DB_CREDS" dbCredsEnvName = "DB_CREDS"
dbCredsHostName = "DB_HOST" dbCredsHostName = "DB_HOST"
dsnTemplate = "clarity:%s@tcp(%s)/%s?parseTime=true"
) )
//<editor-fold name="DBConnectorGeneric"> //<editor-fold name="DBConnectorGeneric">
@ -24,8 +25,8 @@ type DBConnectorGeneric struct {
} }
func (c *DBConnectorGeneric) ExecuteSqlScript(database string, scriptName string) { func (c *DBConnectorGeneric) ExecuteSqlScript(database string, scriptName string) {
c.StartConnection(database) c.startConnection(database)
defer c.ReturnConnection() defer c.returnConnection()
queryWhole := *loadSqlFile(scriptName) queryWhole := *loadSqlFile(scriptName)
queryParts := strings.Split(queryWhole, ";") 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) db := createDbConnection(dataBase)
c.cachedConnection = db c.cachedConnection = db
} }
func (c *DBConnectorGeneric) ReturnConnection() { // returnConnection This just closes the cached db connection
func (c *DBConnectorGeneric) returnConnection() {
err := c.cachedConnection.Close() err := c.cachedConnection.Close()
if err != nil { if err != nil {
log.Panic(err) log.Panic(err)
@ -75,7 +78,7 @@ func (c *DBConnectorGeneric) QueryFromScript(scriptName string) *sql.Rows {
func createDbConnection(database string) *sql.DB { func createDbConnection(database string) *sql.DB {
cred := os.Getenv(dbCredsEnvName) cred := os.Getenv(dbCredsEnvName)
host := os.Getenv(dbCredsHostName) host := os.Getenv(dbCredsHostName)
dbString := "clarity:%s@tcp(%s)/%s" dbString := dsnTemplate
connectString := fmt.Sprintf(dbString, cred, host, database) connectString := fmt.Sprintf(dbString, cred, host, database)
db, err := sql.Open("mysql", connectString) 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 { func QueryForObjects[K any](db *DBConnectorGeneric, dbName string, queryScript string, mapping func(rows *sql.Rows) *K) *[]*K {
rs := make([]*K, 0, 10000) rs := make([]*K, 0, 10000)
db.StartConnection(dbName) db.startConnection(dbName)
defer db.ReturnConnection() defer db.returnConnection()
res := db.QueryFromScript(queryScript) res := db.QueryFromScript(queryScript)
for res.Next() { 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)) { func BulkUpdate[K any](db *DBConnectorGeneric, dbName string, updateScript string, items *[]*K, mapping func(s *sql.Stmt, item *K)) {
db.StartConnection(dbName) db.startConnection(dbName)
defer db.ReturnConnection() defer db.returnConnection()
statement := loadSqlFile(updateScript) statement := loadSqlFile(updateScript)
s, err := db.cachedConnection.Prepare(*statement) s, err := db.cachedConnection.Prepare(*statement)
if err != nil { if err != nil {

Loading…
Cancel
Save