@@ -40,13 +40,6 @@ func NewChAPPLabel() *ChAPPLabel {
4040
4141func (l * ChAPPLabel ) generateNewData (db * metadb.DB ) (map [PrometheusAPPLabelKey ]metadbmodel.ChAPPLabel , bool ) {
4242 log .Infof ("generate data for %s" , l .resourceTypeName , db .LogPrefixORGID )
43- var prometheusLabels []metadbmodel.PrometheusLabel
44- err := db .Unscoped ().Find (& prometheusLabels ).Error
45-
46- if err != nil {
47- log .Errorf (dbQueryResourceFailed (l .resourceTypeName , err ), db .LogPrefixORGID )
48- return nil , false
49- }
5043
5144 appLabelSlice , ok := l .generateAPPLabelData (db )
5245
@@ -55,12 +48,23 @@ func (l *ChAPPLabel) generateNewData(db *metadb.DB) (map[PrometheusAPPLabelKey]m
5548 return nil , false
5649 }
5750
51+ labelRows , err := db .Unscoped ().Model (& metadbmodel.PrometheusLabel {}).Select ("id" , "name" , "value" ).Rows ()
52+ if err != nil {
53+ log .Errorf (dbQueryResourceFailed (l .resourceTypeName , err ), db .LogPrefixORGID )
54+ return nil , false
55+ }
56+ defer labelRows .Close ()
57+
5858 keyToItem := make (map [PrometheusAPPLabelKey ]metadbmodel.ChAPPLabel )
59- for _ , prometheusLabel := range prometheusLabels {
60- labelName := prometheusLabel .Name
59+ for labelRows .Next () {
60+ var id int
61+ var labelName , labelValue string
62+ if scanErr := labelRows .Scan (& id , & labelName , & labelValue ); scanErr != nil {
63+ log .Errorf ("stream scan %s prometheus_label interrupted: %v" , l .resourceTypeName , scanErr , db .LogPrefixORGID )
64+ return nil , false
65+ }
6166 if slices .Contains (appLabelSlice , labelName ) {
6267 labelNameID , nameOK := labelNameIDMap [labelName ]
63- labelValue := prometheusLabel .Value
6468 labelValueID , valueOK := valueNameIDMap [labelValue ]
6569 if ! nameOK || ! valueOK {
6670 log .Warningf ("label name or value not found in db, labelName: %s, labelValue: %s" , labelName , labelValue )
@@ -72,7 +76,10 @@ func (l *ChAPPLabel) generateNewData(db *metadb.DB) (map[PrometheusAPPLabelKey]m
7276 LabelValueID : labelValueID ,
7377 }
7478 }
75-
79+ }
80+ if err := labelRows .Err (); err != nil {
81+ log .Errorf ("stream read %s prometheus_label error: %v" , l .resourceTypeName , err , db .LogPrefixORGID )
82+ return nil , false
7683 }
7784 return keyToItem , true
7885}
@@ -111,29 +118,45 @@ func (l *ChAPPLabel) generateAPPLabelData(db *metadb.DB) ([]string, bool) {
111118func (l * ChAPPLabel ) generateNameIDData (db * metadb.DB ) (map [string ]int , map [string ]int , bool ) {
112119 labelNameIDMap := make (map [string ]int )
113120 valueNameIDMap := make (map [string ]int )
114- var prometheusLabelNames []metadbmodel.PrometheusLabelName
115- var prometheusLabelValues []metadbmodel.PrometheusLabelValue
116-
117- err := db .Unscoped ().Find (& prometheusLabelNames ).Error
118121
122+ nameRows , err := db .Unscoped ().Model (& metadbmodel.PrometheusLabelName {}).Select ("id" , "name" ).Rows ()
119123 if err != nil {
120124 log .Errorf (dbQueryResourceFailed (l .resourceTypeName , err ), db .LogPrefixORGID )
121125 return nil , nil , false
122126 }
127+ defer nameRows .Close ()
128+ for nameRows .Next () {
129+ var id int
130+ var name string
131+ if scanErr := nameRows .Scan (& id , & name ); scanErr != nil {
132+ log .Errorf ("stream scan %s prometheus_label_name interrupted: %v" , l .resourceTypeName , scanErr , db .LogPrefixORGID )
133+ return nil , nil , false
134+ }
135+ labelNameIDMap [name ] = id
136+ }
137+ if err := nameRows .Err (); err != nil {
138+ log .Errorf ("stream read %s prometheus_label_name error: %v" , l .resourceTypeName , err , db .LogPrefixORGID )
139+ return nil , nil , false
140+ }
123141
124- err = db .Unscoped ().Find (& prometheusLabelValues ).Error
125-
142+ valueRows , err := db .Unscoped ().Model (& metadbmodel.PrometheusLabelValue {}).Select ("id" , "value" ).Rows ()
126143 if err != nil {
127144 log .Errorf (dbQueryResourceFailed (l .resourceTypeName , err ), db .LogPrefixORGID )
128145 return nil , nil , false
129146 }
130-
131- for _ , prometheusLabelName := range prometheusLabelNames {
132- labelNameIDMap [prometheusLabelName .Name ] = prometheusLabelName .ID
147+ defer valueRows .Close ()
148+ for valueRows .Next () {
149+ var id int
150+ var value string
151+ if scanErr := valueRows .Scan (& id , & value ); scanErr != nil {
152+ log .Errorf ("stream scan %s prometheus_label_value interrupted: %v" , l .resourceTypeName , scanErr , db .LogPrefixORGID )
153+ return nil , nil , false
154+ }
155+ valueNameIDMap [value ] = id
133156 }
134-
135- for _ , prometheusLabelValue := range prometheusLabelValues {
136- valueNameIDMap [ prometheusLabelValue . Value ] = prometheusLabelValue . ID
157+ if err := valueRows . Err (); err != nil {
158+ log . Errorf ( "stream read %s prometheus_label_value error: %v" , l . resourceTypeName , err , db . LogPrefixORGID )
159+ return nil , nil , false
137160 }
138161 return labelNameIDMap , valueNameIDMap , true
139162}
0 commit comments