// Format transforms collectd data to influx 0.9.x data func (format *CollectdToInflux10) Format(msg core.Message) ([]byte, core.MessageStreamID) { data, streamID := format.base.Format(msg) collectdData, err := parseCollectdPacket(data) if err != nil { Log.Error.Print("Collectd parser error: ", err) return []byte{}, streamID // ### return, error ### } // Manually convert to line protocol influxData := shared.NewByteStream(len(data)) timestamp := int64(collectdData.Time * 1000) fixedPart := fmt.Sprintf( `%s,plugin_instance=%s,type=%s,type_instance=%s,host=%s`, format.escapeTag(collectdData.Plugin), format.escapeTag(collectdData.PluginInstance), format.escapeTag(collectdData.PluginType), format.escapeTag(collectdData.TypeInstance), format.escapeTag(collectdData.Host)) setSize := shared.Min3I(len(collectdData.Dstypes), len(collectdData.Dsnames), len(collectdData.Values)) for i := 0; i < setSize; i++ { fmt.Fprintf(&influxData, `%s,dstype=%s,dsname=%s value=%f %d\n`, fixedPart, format.escapeTag(collectdData.Dstypes[i]), format.escapeTag(collectdData.Dsnames[i]), collectdData.Values[i], timestamp) } return influxData.Bytes(), streamID }
// Configure sets the database connection values func (writer *influxDBWriter10) configure(conf core.PluginConfig, prod *InfluxDB) error { writer.host = conf.GetString("Host", "localhost:8086") writer.username = conf.GetString("User", "") writer.password = conf.GetString("Password", "") writer.databaseTemplate = conf.GetString("Database", "default") writer.buffer = shared.NewByteStream(4096) writer.connectionUp = false writer.timeBasedDBName = conf.GetBool("TimeBasedName", true) writer.Control = prod.Control writer.writeURL = fmt.Sprintf("http://%s/write", writer.host) writer.queryURL = fmt.Sprintf("http://%s/query", writer.host) writer.pingURL = fmt.Sprintf("http://%s/ping", writer.host) writer.separator = '?' if writer.username != "" { credentials := fmt.Sprintf("?u=%s&p=%s", url.QueryEscape(writer.username), url.QueryEscape(writer.password)) writer.writeURL += credentials writer.queryURL += credentials writer.separator = '&' } writer.writeURL = fmt.Sprintf("%s%cprecision=ms", writer.writeURL, writer.separator) prod.SetCheckFuseCallback(writer.isConnectionUp) return nil }
// Configure sets the database connection values func (writer *influxDBWriter09) configure(conf core.PluginConfig, prod *InfluxDB) error { writer.host = conf.GetString("Host", "localhost:8086") writer.username = conf.GetString("User", "") writer.password = conf.GetString("Password", "") writer.databaseTemplate = conf.GetString("Database", "default") writer.buffer = shared.NewByteStream(4096) writer.connectionUp = false writer.Control = prod.Control writer.writeURL = fmt.Sprintf("http://%s/write", writer.host) writer.queryURL = fmt.Sprintf("http://%s/query", writer.host) writer.pingURL = fmt.Sprintf("http://%s/ping", writer.host) writer.separator = '?' writer.timeBasedDBName = conf.GetBool("TimeBasedName", true) if writer.username != "" { credentials := fmt.Sprintf("?u=%s&p=%s", url.QueryEscape(writer.username), url.QueryEscape(writer.password)) writer.writeURL += credentials writer.queryURL += credentials writer.separator = '&' } if retentionPolicy := conf.GetString("RetentionPolicy", ""); retentionPolicy != "" { writer.messageHeader = fmt.Sprintf("{\"database\":\"%%s\",\"retentionPolicy\":\"%s\",\"points\":[", retentionPolicy) } else { writer.messageHeader = "{\"database\":\"%s\",\"points\":[" } prod.SetCheckFuseCallback(writer.isConnectionUp) return nil }
// Format transforms collectd data to influx 0.9.x data func (format *CollectdToInflux09) Format(msg core.Message) ([]byte, core.MessageStreamID) { data, streamID := format.base.Format(msg) collectdData, err := parseCollectdPacket(data) if err != nil { Log.Error.Print("Collectd parser error: ", err) return []byte{}, streamID // ### return, error ### } // Manually convert to JSON lines influxData := shared.NewByteStream(len(data)) fixedPart := fmt.Sprintf( `{"name": "%s", "timestamp": %d, "precision": "ms", "tags": {"plugin_instance": "%s", "type": "%s", "type_instance": "%s", "host": "%s"`, collectdData.Plugin, int64(collectdData.Time), collectdData.PluginInstance, collectdData.PluginType, collectdData.TypeInstance, collectdData.Host) setSize := shared.Min3I(len(collectdData.Dstypes), len(collectdData.Dsnames), len(collectdData.Values)) for i := 0; i < setSize; i++ { fmt.Fprintf(&influxData, `%s, "dstype": "%s", "dsname": "%s"}, "fields": {"value": %f} },`, fixedPart, collectdData.Dstypes[i], collectdData.Dsnames[i], collectdData.Values[i]) } return influxData.Bytes(), streamID }
// Format transforms collectd data to influx 0.8.x data func (format *CollectdToInflux08) Format(msg core.Message) ([]byte, core.MessageStreamID) { data, streamID := format.base.Format(msg) collectdData, err := parseCollectdPacket(data) if err != nil { Log.Error.Print("Collectd parser error: ", err) return []byte{}, streamID // ### return, error ### } // Manually convert to JSON lines influxData := shared.NewByteStream(len(data)) name := format.createMetricName(collectdData.Plugin, collectdData.PluginInstance, collectdData.PluginType, collectdData.TypeInstance, collectdData.Host) for _, value := range collectdData.Values { fmt.Fprintf(&influxData, `{"name": "%s", "columns": ["time", "value"], "points":[[%d, %f]]},`, name, int32(collectdData.Time), value) } return influxData.Bytes(), streamID }
// Configure sets the database connection values func (writer *influxDBWriter08) configure(conf core.PluginConfig, prod *InfluxDB) error { writer.host = conf.GetString("Host", "localhost:8086") writer.username = conf.GetString("User", "") writer.password = conf.GetString("Password", "") writer.databaseTemplate = conf.GetString("Database", "default") writer.buffer = shared.NewByteStream(4096) writer.connectionUp = false writer.timeBasedDBName = conf.GetBool("TimeBasedName", true) writer.Control = prod.Control writer.writeURL = fmt.Sprintf("http://%s/db/%%s/series?time_precision=ms", writer.host) writer.testURL = fmt.Sprintf("http://%s/db", writer.host) if writer.username != "" { credentials := fmt.Sprintf("u=%s&p=%s", url.QueryEscape(writer.username), url.QueryEscape(writer.password)) writer.writeURL += "&" + credentials writer.testURL += "?" + credentials } prod.SetCheckFuseCallback(writer.isConnectionUp) return nil }