11package profiler
22
33import (
4- "database/sql"
54 "encoding/json"
65 "io"
76 "net/http"
@@ -11,7 +10,6 @@ import (
1110)
1211
1312type handler struct {
14- db * sql.DB
1513}
1614
1715func (h * handler ) Priority () int { return 40 }
@@ -40,21 +38,19 @@ func (h *handler) Handle(r *http.Request) (*event.Incoming, error) {
4038 // Process the profile (compute diffs, percentages, edges).
4139 peaks , edges := Process (& incoming )
4240
43- // Store in profiler-specific tables.
4441 uuid := event .GenerateUUID ()
45- if err := storeProfile (h .db , uuid , incoming .AppName , peaks , edges ); err != nil {
46- return nil , err
47- }
4842
4943 // Build event payload matching PHP Buggregator format.
50- // profile_uuid is used by the frontend to fetch call-graph/top/flame-chart.
44+ // peaks and edges are embedded so OnEventStored can store them
45+ // without re-parsing the original payload.
5146 payload := map [string ]any {
5247 "profile_uuid" : uuid ,
5348 "app_name" : incoming .AppName ,
5449 "hostname" : incoming .Hostname ,
5550 "date" : incoming .Date ,
5651 "tags" : incoming .Tags ,
5752 "peaks" : peaks ,
53+ "edges" : edges ,
5854 "total_edges" : len (edges ),
5955 }
6056 b , _ := json .Marshal (payload )
@@ -65,45 +61,3 @@ func (h *handler) Handle(r *http.Request) (*event.Incoming, error) {
6561 Payload : json .RawMessage (b ),
6662 }, nil
6763}
68-
69- func storeProfile (db * sql.DB , uuid , name string , peaks Metrics , edges map [string ]Edge ) error {
70- tx , err := db .Begin ()
71- if err != nil {
72- return err
73- }
74- defer tx .Rollback ()
75-
76- _ , err = tx .Exec (
77- `INSERT INTO profiles (uuid, name, cpu, wt, ct, mu, pmu) VALUES (?, ?, ?, ?, ?, ?, ?)` ,
78- uuid , name , peaks .CPU , peaks .WallTime , peaks .Calls , peaks .Memory , peaks .PeakMem ,
79- )
80- if err != nil {
81- return err
82- }
83-
84- stmt , err := tx .Prepare (`INSERT INTO profile_edges
85- (uuid, profile_uuid, "order", cpu, wt, ct, mu, pmu, d_cpu, d_wt, d_ct, d_mu, d_pmu, p_cpu, p_wt, p_ct, p_mu, p_pmu, callee, caller, parent_uuid)
86- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` )
87- if err != nil {
88- return err
89- }
90- defer stmt .Close ()
91-
92- order := 0
93- for _ , edge := range edges {
94- edgeUUID := event .GenerateUUID ()
95- _ , err = stmt .Exec (
96- edgeUUID , uuid , order ,
97- edge .Cost .CPU , edge .Cost .WallTime , edge .Cost .Calls , edge .Cost .Memory , edge .Cost .PeakMem ,
98- edge .Diff .CPU , edge .Diff .WallTime , edge .Diff .Calls , edge .Diff .Memory , edge .Diff .PeakMem ,
99- edge .Percents .CPU , edge .Percents .WallTime , edge .Percents .Calls , edge .Percents .Memory , edge .Percents .PeakMem ,
100- edge .Callee , edge .Caller , edge .Parent ,
101- )
102- if err != nil {
103- return err
104- }
105- order ++
106- }
107-
108- return tx .Commit ()
109- }
0 commit comments