Skip to content

Commit

Permalink
add better timing tracking to generate command
Browse files Browse the repository at this point in the history
  • Loading branch information
ZelvaMan committed May 20, 2024
2 parents 792f7cd + ba0a3ec commit b494a0c
Show file tree
Hide file tree
Showing 27 changed files with 80 additions and 19 deletions.
49 changes: 30 additions & 19 deletions cmd/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ package cmd

import (
"fmt"
dbGen2 "github.com/keenmate/db-gen/private/dbGen"
common2 "github.com/keenmate/db-gen/private/helpers"
"github.com/keenmate/db-gen/private/dbGen"
"github.com/keenmate/db-gen/private/helpers"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"log"
)

const keyUseRoutinesFile = "useRoutinesFile"

var generateFlags = []common2.FlagArgument{
common2.NewBoolFlag(keyUseRoutinesFile, "", false, "Use routines file to generate code"),
var generateFlags = []helpers.FlagArgument{
helpers.NewBoolFlag(keyUseRoutinesFile, "", false, "Use routines file to generate code"),
}

var generateCmd = &cobra.Command{
Expand All @@ -27,74 +27,85 @@ var generateCmd = &cobra.Command{
`,
Run: func(cmd *cobra.Command, args []string) {
common2.BindFlags(cmd, append(commonFlags, generateFlags...))
_, err := dbGen2.ReadConfig(viper.GetString(keyConfig))
helpers.BindFlags(cmd, append(commonFlags, generateFlags...))
_, err := dbGen.ReadConfig(viper.GetString(keyConfig))
if err != nil {
common2.Exit("configuration error: %s", err)
helpers.Exit("configuration error: %s", err)
}

viper.AutomaticEnv() // read in environment variables that match

err = doGenerate()
if err != nil {
common2.Exit(err.Error())
helpers.Exit(err.Error())
}
},
}

func init() {
rootCmd.AddCommand(generateCmd)

common2.DefineFlags(generateCmd, append(commonFlags, generateFlags...))
helpers.DefineFlags(generateCmd, append(commonFlags, generateFlags...))
}

func doGenerate() error {
timer := helpers.NewTimer()
log.Printf("Getting configurations...")

config, err := dbGen2.GetAndValidateConfig()
config, err := dbGen.GetAndValidateConfig()
if err != nil {
return fmt.Errorf("error getting config %s", err)
}

common2.LogDebug("Debug logging is enabled")
helpers.LogDebug("Debug logging is enabled")
timer.AddEntry("getting config")

var routines []dbGen2.DbRoutine
var routines []dbGen.DbRoutine

log.Printf("Getting routines...")
routines, err = dbGen2.GetRoutines(config)
routines, err = dbGen.GetRoutines(config)
if err != nil {
return fmt.Errorf("error getting routines: %s", err)
}
log.Printf("Got %d routines", len(routines))

timer.AddEntry("getting routines")
if config.Debug {
common2.LogDebug("Saving to debug file...")
err = common2.SaveToTempFile(routines, "dbRoutines")
helpers.LogDebug("Saving to debug file...")
err = helpers.SaveToTempFile(routines, "dbRoutines")
if err != nil {
return fmt.Errorf("error saving debug file: %s", err)
}
timer.AddEntry("saving debug file")

}

log.Printf("Preprocessing...")
processedFunctions, err := dbGen2.Process(routines, config)
processedFunctions, err := dbGen.Process(routines, config)
if err != nil {
return fmt.Errorf("error preprocessing: %s", err)
}
log.Printf("After preprocessing %d - %d = %d functions left", len(routines), len(routines)-len(processedFunctions), len(processedFunctions))
timer.AddEntry("preprocessing")

if config.Debug {
common2.LogDebug("Saving to debug file...")
err = common2.SaveToTempFile(processedFunctions, "mapped")
helpers.LogDebug("Saving to debug file...")
err = helpers.SaveToTempFile(processedFunctions, "mapped")
if err != nil {
return fmt.Errorf("error saving debug file: %s", err)
}
timer.AddEntry("saving debug file")

}

log.Printf("Generating...")
err = dbGen2.Generate(processedFunctions, config)
err = dbGen.Generate(processedFunctions, config)
if err != nil {
return fmt.Errorf("error generating: %s", err)
}

timer.AddEntry("generating files")
timer.Finish()
log.Printf(timer.String())
return nil
}
Empty file modified private/database/database.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/config.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/configMapper.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/filter.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/generator-functions.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/generator.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/mapper.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/preprocess.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/processing.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/routinesProvider.go
100644 → 100755
Empty file.
Empty file modified private/dbGen/types.go
100644 → 100755
Empty file.
Empty file modified private/helpers/debug.go
100644 → 100755
Empty file.
Empty file modified private/helpers/flags.go
100644 → 100755
Empty file.
Empty file modified private/helpers/fs.go
100644 → 100755
Empty file.
Empty file modified private/helpers/helpers.go
100644 → 100755
Empty file.
Empty file modified private/helpers/logging.go
100644 → 100755
Empty file.
Empty file modified private/helpers/strings.go
100644 → 100755
Empty file.
50 changes: 50 additions & 0 deletions private/helpers/timer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package helpers

import (
"fmt"
"strings"
"time"
)

type entry struct {
time time.Time
label string
}

type Timer struct {
timers []entry
}

func NewTimer() *Timer {
timer := &Timer{timers: []entry{}}
timer.AddEntry("start")

return timer
}

func (t *Timer) Finish() {
t.AddEntry("finish")
}

func (t *Timer) String() string {
if len(t.timers) < 2 {
return "Timer not stopped"
}
var str strings.Builder

startTime := t.timers[0].time
endTime := t.timers[len(t.timers)-1].time
totalExecTime := endTime.Sub(startTime)
str.WriteString(fmt.Sprintf("Total execution time %s \n", totalExecTime))

for i, entry := range t.timers[1 : len(t.timers)-1] {
sinceLast := entry.time.Sub(t.timers[i].time)
sinceStart := entry.time.Sub(startTime)
str.WriteString(fmt.Sprintf(" %s: %s (%s)\n", entry.label, sinceLast, sinceStart))
}
return str.String()
}

func (t *Timer) AddEntry(label string) {
t.timers = append(t.timers, entry{time: time.Now(), label: label})
}
Empty file modified private/version/version.go
100644 → 100755
Empty file.
Empty file modified test/database/testing-db.sql
100644 → 100755
Empty file.
Empty file modified test/db-gen-routines.json
100644 → 100755
Empty file.
Empty file modified test/db-gen.json
100644 → 100755
Empty file.
Empty file modified test/local.db-gen.json
100644 → 100755
Empty file.
Empty file modified test/templates/dbcontext.gotmpl
100644 → 100755
Empty file.
Empty file modified test/templates/model.gotmpl
100644 → 100755
Empty file.
Empty file modified test/templates/processor.gotmpl
100644 → 100755
Empty file.

0 comments on commit b494a0c

Please sign in to comment.