github.com/developest/gtm-enhanced@v1.0.4-0.20220111132249-cc80a3372c3f/metric/manager.go (about) 1 // Copyright 2016 Michael Schenk. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE file. 4 5 package metric 6 7 import ( 8 "github.com/DEVELOPEST/gtm-core/event" 9 "github.com/DEVELOPEST/gtm-core/note" 10 "github.com/DEVELOPEST/gtm-core/project" 11 "github.com/DEVELOPEST/gtm-core/scm" 12 "github.com/DEVELOPEST/gtm-core/util" 13 ) 14 15 // Process events for last git commit and save time spent as a git note 16 // If interim is true, process events for the current working and staged files 17 func Process(interim bool, projPath ...string) (note.CommitNote, error) { 18 defer util.Profile()() 19 20 rootPath, gtmPath, err := project.Paths(projPath...) 21 if err != nil { 22 return note.CommitNote{}, err 23 } 24 25 // load any saved metrics 26 metricMap, err := loadMetrics(gtmPath) 27 if err != nil { 28 return note.CommitNote{}, err 29 } 30 31 // process event files 32 epochEventMap, err := event.Process(gtmPath, interim) 33 if err != nil { 34 return note.CommitNote{}, err 35 } 36 37 // allocate time for events 38 for ep := range epochEventMap { 39 err := allocateTime(ep, metricMap, epochEventMap[ep]) 40 if err != nil { 41 return note.CommitNote{}, err 42 } 43 } 44 45 branch := scm.CurrentBranch(rootPath) 46 47 var commitNote note.CommitNote 48 49 if interim { 50 commitMap, readonlyMap, err := buildInterimCommitMaps(metricMap, projPath...) 51 if err != nil { 52 return note.CommitNote{}, err 53 } 54 55 commitNote, err = buildCommitNote(rootPath, branch, commitMap, readonlyMap) 56 if err != nil { 57 return note.CommitNote{}, err 58 } 59 60 } else { 61 commitMap, readonlyMap, err := buildCommitMaps(metricMap) 62 if err != nil { 63 return note.CommitNote{}, err 64 } 65 66 commitNote, err = buildCommitNote(rootPath, branch, commitMap, readonlyMap) 67 if err != nil { 68 return note.CommitNote{}, err 69 } 70 71 if err := scm.CreateNote(note.Marshal(commitNote), project.NoteNameSpace, ""); err != nil { 72 return note.CommitNote{}, err 73 } 74 if err := saveAndPurgeMetrics(gtmPath, metricMap, commitMap, readonlyMap); err != nil { 75 return note.CommitNote{}, err 76 } 77 } 78 79 return commitNote, nil 80 }