func (this *esBufferWorker) flush(r engine.FilterRunner, h engine.PluginHelper) { if this.summary.N == 0 { return } // generate new pack pack := h.PipelinePack(0) switch this.expression { case "count": pack.Message.SetField(this.esField, this.summary.N) case "mean": pack.Message.SetField(this.esField, this.summary.Mean) case "max": pack.Message.SetField(this.esField, this.summary.Max) case "min": pack.Message.SetField(this.esField, this.summary.Min) case "sd": pack.Message.SetField(this.esField, this.summary.Sd()) case "sum": pack.Message.SetField(this.esField, this.summary.Sum) default: panic("invalid expression: " + this.expression) } pack.Message.Timestamp = this.timestamp pack.Ident = this.ident pack.EsIndex = indexName(h.Project(this.projectName), this.indexPattern, time.Unix(int64(this.timestamp), 0)) pack.EsType = this.esType pack.Project = this.projectName globals := engine.Globals() if globals.Debug { globals.Println(*pack) } r.Inject(pack) this.summary.Reset() }
// for each inbound pack, this filter will generate several new pack // the original pack will be recycled immediately func (this *CardinalityFilter) handlePack(r engine.FilterRunner, h engine.PluginHelper, pack *engine.PipelinePack) { globals := engine.Globals() for _, c := range this.converters { if !pack.Logfile.MatchPrefix(c.logPrefix) || pack.Project != c.project { continue } for _, f := range c.fields { val, err := pack.Message.FieldValue(f.key, f.typ) if err != nil { if globals.Verbose { h.Project(c.project).Println(err) } return } for _, interval := range f.intervals { // generate new pack p := h.PipelinePack(pack.MsgLoopCount) if p == nil { globals.Println("can't get pack in filter") continue } p.Ident = this.ident p.Project = c.project p.CardinalityKey = fmt.Sprintf("%s.%s.%s", pack.Project, f.key, interval) p.CardinalityData = val p.CardinalityInterval = interval r.Inject(p) } } } }