本文整理汇总了Golang中github.com/intelsdi-x/snap/control/plugin.MetricType.Data方法的典型用法代码示例。如果您正苦于以下问题:Golang MetricType.Data方法的具体用法?Golang MetricType.Data怎么用?Golang MetricType.Data使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/intelsdi-x/snap/control/plugin.MetricType
的用法示例。
在下文中一共展示了MetricType.Data方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: createEvent
func createEvent(m plugin.MetricType, config map[string]ctypes.ConfigValue) *raidman.Event {
return &raidman.Event{
Host: m.Tags()[core.STD_TAG_PLUGIN_RUNNING_ON],
Service: m.Namespace().String(),
Metric: m.Data(),
}
}
示例2: checkValues
func checkValues(metric plugin.MetricType, mockData []uint64) bool {
result := false
// get last namespace's item
last := len(metric.Namespace()) - 1
// approximation error, acceptance boundary is (+/-) 0.5
approxErr := 0.5
switch metric.Namespace().Strings()[last] {
case nLoggedUsers:
// take the last set mock data
if metric.Data() == mockData[len(mockData)-1] {
result = true
}
case nLoggedUsersMin:
if metric.Data() == min(mockData) {
result = true
}
case nLoggedUsersMax:
if metric.Data() == max(mockData) {
result = true
}
case nLoggedUsersAvg:
if math.Abs(metric.Data().(float64)-avg(mockData)) <= approxErr {
result = true
}
}
return result
}
示例3: sendEvent
func sendEvent(orgId int64, m *plugin.MetricType) {
ns := m.Namespace().Strings()
if len(ns) != 4 {
log.Printf("Error: invalid event metric. Expected namesapce to be 4 fields.")
return
}
if ns[0] != "worldping" || ns[1] != "event" {
log.Printf("Error: invalid event metrics. Metrics hould begin with 'worldping.event'")
return
}
hostname, _ := os.Hostname()
id := time.Now().UnixNano()
event := &schema.ProbeEvent{
OrgId: orgId,
EventType: ns[2],
Severity: ns[3],
Source: hostname,
Timestamp: id / int64(time.Millisecond),
Message: m.Data().(string),
Tags: m.Tags(),
}
body, err := msg.CreateProbeEventMsg(event, id, msg.FormatProbeEventMsgp)
if err != nil {
log.Printf("Error: unable to convert event to ProbeEventMsgp. %s", err)
return
}
sent := false
for !sent {
if err = PostData("events", Token, body); err != nil {
log.Printf("Error: %s", err)
time.Sleep(time.Second)
} else {
sent = true
}
}
}
示例4: calculateMovingAverage
func (p *movingAverageProcessor) calculateMovingAverage(m plugin.MetricType, logger *log.Logger) (float64, error) {
namespace := concatNameSpace(m.Namespace().Strings())
switch v := m.Data().(type) {
default:
logger.Warnln(fmt.Sprintf("Unknown data received: Type %T", v))
return 0.0, nil
case int:
if _, ok := p.movingAverageMap[namespace]; ok {
counter, err := p.getCounter(namespace)
counterCurrent := counter % p.movingBufLength
err = p.addBufferData(counterCurrent, m.Data(), namespace)
if err != nil {
return 0.0, err
}
sum := int(0)
//Initial Counter is used to give correct average for initial iterations ie when the buffer is not full
initialCounter := 0
for i := 0; i < p.movingBufLength; i++ {
if p.getBufferData(i, namespace) != nil {
initialCounter++
sum += p.getBufferData(i, namespace).(int)
}
}
movingAvg := float64(sum) / float64(initialCounter)
counterCurrent++
p.setCounter(namespace, counterCurrent)
return movingAvg, err
} else {
//Since map doesnot have an entry of this namespace, it's creating an entry for the namespace.
//Also m.data value is inserted into 0th position of the buffer because we know that this buffer is being used for the first time
p.movingAverageMap[namespace] = newmovingAverage(p.getBufferLength())
err := p.addBufferData(0, m.Data(), namespace)
if err != nil {
return 0.0, err
}
sum := p.getBufferData(0, namespace).(int)
p.setCounter(namespace, 1)
return float64(sum), nil
}
case float64:
if _, ok := p.movingAverageMap[namespace]; ok {
counter, err := p.getCounter(namespace)
counterCurrent := counter % p.movingBufLength
err = p.addBufferData(counterCurrent, m.Data(), namespace)
if err != nil {
return 0.0, err
}
sum := float64(0)
initialCounter := 0
for i := 0; i < p.movingBufLength; i++ {
if p.getBufferData(i, namespace) != nil {
initialCounter++
sum += p.getBufferData(i, namespace).(float64)
}
}
movingAvg := float64(sum) / float64(initialCounter)
counterCurrent++
p.setCounter(namespace, counterCurrent)
return movingAvg, err
}
p.movingAverageMap[namespace] = newmovingAverage(p.getBufferLength())
err := p.addBufferData(0, m.Data(), namespace)
if err != nil {
return 0.0, err
}
sum := p.getBufferData(0, namespace).(float64)
p.setCounter(namespace, 1)
return float64(sum), nil
case float32:
if _, ok := p.movingAverageMap[namespace]; ok {
counter, err := p.getCounter(namespace)
counterCurrent := counter % p.movingBufLength
err = p.addBufferData(counterCurrent, m.Data(), namespace)
if err != nil {
return 0.0, err
}
sum := float32(0)
initialCounter := 0
for i := 0; i < p.movingBufLength; i++ {
if p.getBufferData(i, namespace) != nil {
initialCounter++
sum += p.getBufferData(i, namespace).(float32)
}
}
movingAvg := float64(sum) / float64(initialCounter)
p.setCounter(namespace, counterCurrent)
return movingAvg, err
//.........这里部分代码省略.........
示例5: setHekaMessageFields
// function which fills all part of Heka message
func setHekaMessageFields(m plugin.MetricType, msg *message.Message) error {
mName := make([]string, 0, len(m.Namespace()))
var dimField *message.Field
var err error
// Loop on namespace elements
for _, elt := range m.Namespace() {
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Namespace %#+v",
elt))
// Dynamic element is not inserted in metric name
// but rather added to dimension field
if elt.IsDynamic() {
dimField, err = addToDimensions(dimField, elt.Name)
if err != nil {
logger.WithField("_block", "setHekaMessageFields").Error(err)
return err
}
addField(elt.Name, elt.Value, msg)
} else {
// Static element is concatenated to metric name
mName = append(mName, elt.Value)
}
}
// Processing of tags
if len(m.Tags()) > 0 {
for tag, value := range m.Tags() {
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Adding tag=%s value=%s",
tag, value))
dimField, err = addToDimensions(dimField, tag)
if err != nil {
logger.WithField("_block", "setHekaMessageFields").Error(err)
return err
}
addField(tag, value, msg)
}
}
if dimField != nil {
msg.AddField(dimField)
}
// Handle metric name
metricName := strings.Join(mName, ".")
// TODO protect access using mutex
// for potential race conditions
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Checking metric=%s",
metricName))
// Is mapping already stored
if val, ok := MetricMappings[metricName]; ok {
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Metric=%s in cache %s",
metricName, val))
metricName = val
} else {
oldMetricName := metricName
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Metric=%s not in cache",
metricName))
// Namespace handling
for kmapping, vmapping := range globalMappings.Namespace {
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Checking metric=%s against namespace %s (%s)",
metricName, kmapping, vmapping))
// Try to see if substitution changes something
newMetricName := strings.Replace(metricName, kmapping, vmapping, 1)
if strings.Compare(newMetricName, metricName) != 0 {
MetricMappings[oldMetricName] = newMetricName
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Changing metric=%s into %s",
metricName, newMetricName))
metricName = newMetricName
}
}
// Metrics handling
for kmapping, vmapping := range globalMappings.Metrics {
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Checking metric=%s against metric %s (%s)",
metricName, kmapping, vmapping))
// Try to see if substitution changes something
newMetricName := strings.Replace(metricName, kmapping, vmapping, 1)
if strings.Compare(newMetricName, metricName) != 0 {
MetricMappings[oldMetricName] = newMetricName
logger.WithField("_block", "setHekaMessageFields").Debug(
fmt.Sprintf("Changing metric=%s into %s",
metricName, newMetricName))
metricName = newMetricName
}
}
}
addField("name", metricName, msg)
addField("value", getData(m.Data()), msg)
addField("timestamp", m.Timestamp().UnixNano(), msg)
return nil
}