| 140 | } |
| 141 | |
| 142 | func (rt *Router) falconPush(c *gin.Context) { |
| 143 | var bs []byte |
| 144 | var err error |
| 145 | var r *gzip.Reader |
| 146 | |
| 147 | if c.GetHeader("Content-Encoding") == "gzip" { |
| 148 | r, err = gzip.NewReader(c.Request.Body) |
| 149 | if err != nil { |
| 150 | c.String(400, err.Error()) |
| 151 | return |
| 152 | } |
| 153 | defer r.Close() |
| 154 | bs, err = ioutil.ReadAll(r) |
| 155 | } else { |
| 156 | defer c.Request.Body.Close() |
| 157 | bs, err = ioutil.ReadAll(c.Request.Body) |
| 158 | } |
| 159 | |
| 160 | if err != nil { |
| 161 | c.String(400, err.Error()) |
| 162 | return |
| 163 | } |
| 164 | |
| 165 | var arr FalconMetricArr |
| 166 | |
| 167 | if bs[0] == '[' { |
| 168 | err = easyjson.Unmarshal(bs, &arr) |
| 169 | } else { |
| 170 | var one FalconMetric |
| 171 | err = easyjson.Unmarshal(bs, &one) |
| 172 | arr = []FalconMetric{one} |
| 173 | } |
| 174 | |
| 175 | if err != nil { |
| 176 | c.String(400, err.Error()) |
| 177 | return |
| 178 | } |
| 179 | |
| 180 | queueid := fmt.Sprint(atomic.AddUint64(&globalCounter, 1) % uint64(rt.Pushgw.WriterOpt.QueueNumber)) |
| 181 | |
| 182 | var ( |
| 183 | succ int |
| 184 | fail int |
| 185 | msg = "received" |
| 186 | ts = time.Now().Unix() |
| 187 | ids = make(map[string]struct{}) |
| 188 | ) |
| 189 | |
| 190 | for i := 0; i < len(arr); i++ { |
| 191 | if err := arr[i].Clean(ts); err != nil { |
| 192 | fail++ |
| 193 | continue |
| 194 | } |
| 195 | |
| 196 | pt, ident, err := arr[i].ToProm() |
| 197 | if err != nil { |
| 198 | fail++ |
| 199 | continue |