1
0
Fork 0

수치 매초 보내도록 함

This commit is contained in:
Sangbum Kim 2017-09-24 20:11:39 +09:00
parent e35a6df56d
commit b297c3d6ed
3 changed files with 45 additions and 62 deletions

View File

@ -13,6 +13,11 @@ var (
influxLogger = logger.NewLogger("influx") influxLogger = logger.NewLogger("influx")
) )
type data struct {
Tempeture float64
FanSpeed int
}
type influxMetric struct { type influxMetric struct {
host string host string
processorCount int processorCount int
@ -80,19 +85,19 @@ func (m *influxMetric) StartLogging() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
ticker := time.Tick(time.Second*2) ticker := time.Tick(time.Second)
fanspeedList, tempetureList := make([]processor.FanspeedInfo, 0, 0), make([]processor.TempetureInfo, 0, 0) dataList := make([]data,m.processorCount)
for { for {
select { select {
case <-ticker: case <-ticker:
fanspeedListTemp, tempetureListTemp := fanspeedList, tempetureList sendData := make([]data,m.processorCount)
fanspeedList, tempetureList = make([]processor.FanspeedInfo, 0, 0), make([]processor.TempetureInfo, 0, 0) copy(sendData,dataList)
go m.sendPoint(influxDbConn, batchPoint, fanspeedListTemp, tempetureListTemp) go m.sendPoint(influxDbConn, batchPoint, sendData)
case changedSpeed := <-m.fanSpeedConsumer: case changedSpeed := <-m.fanSpeedConsumer:
fanspeedList = append(fanspeedList, changedSpeed) dataList[changedSpeed.Id].FanSpeed =changedSpeed.FanSpeed
case changedTempeture := <-m.tempetureConsumer: case changedTempeture := <-m.tempetureConsumer:
tempetureList = append(tempetureList, changedTempeture) dataList[changedTempeture.Id].Tempeture =changedTempeture.Tempeture
case <-m.handler.Done(): case <-m.handler.Done():
return return
} }
@ -101,22 +106,14 @@ func (m *influxMetric) StartLogging() {
func (m *influxMetric) sendPoint( func (m *influxMetric) sendPoint(
influxDbConn client.Client, influxDbConn client.Client,
batchPoint client.BatchPoints, batchPoint client.BatchPoints,
fanspeeds []processor.FanspeedInfo, tempetures []processor.TempetureInfo) { datas []data) {
pointList := make([]*client.Point, 0, 0) pointList := make([]*client.Point, 0, 0)
at:=time.Now()
for _, fanspeed := range fanspeeds { for id, data := range datas {
if point, err := m.getFanspeedPoint(fanspeed); err == nil { if point, err := m.getPoint(id,data,at); err == nil {
pointList = append(pointList, point) pointList = append(pointList, point)
} else { } else {
influxLogger.Debugf("id %d speed err %s", fanspeed.Id, err) influxLogger.Debugf("id %d err %s", id, err)
}
}
for _, tempeture := range tempetures {
if point, err := m.getTempeturePoint(tempeture); err == nil {
pointList = append(pointList, point)
} else {
influxLogger.Debugf("id %d tempeture err %s", tempeture.Id, err)
} }
} }
@ -131,24 +128,14 @@ func (m *influxMetric) sendPoint(
} }
func (m *influxMetric) getTempeturePoint(info processor.TempetureInfo) (*client.Point, error) { func (m *influxMetric) getPoint(id int,data data,at time.Time) (*client.Point, error) {
// Create a point and add to batch // Create a point and add to batch
tags := map[string]string{"processor": strconv.Itoa(info.Id)} tags := map[string]string{"processor": strconv.Itoa(id)}
fields := map[string]interface{}{ fields := map[string]interface{}{
"tempeture": info.Tempeture, "tempeture": data.Tempeture,
"fan": data.FanSpeed,
} }
return client.NewPoint("processor_tempeture", tags, fields, info.At) return client.NewPoint("processor", tags, fields, at)
} }
func (m *influxMetric) getFanspeedPoint(info processor.FanspeedInfo) (*client.Point, error) {
// Create a point and add to batch
tags := map[string]string{"processor": strconv.Itoa(info.Id)}
fields := map[string]interface{}{
"noob": info.FanSpeed,
}
return client.NewPoint("processor_cooling_fanspeed", tags, fields, info.At)
}

View File

@ -117,8 +117,8 @@ func main() {
handler.NotifyError(errors.New("cpu not found!")) handler.NotifyError(errors.New("cpu not found!"))
} }
var ( var (
tempetureChannel = make(chan processor.TempetureInfo) tempetureChannel = make(chan processor.TempetureInfo,1)
fanspeedChannel = make(chan processor.FanspeedInfo) fanspeedChannel = make(chan processor.FanspeedInfo,1)
) )
processors = make([]processor.Processor, 0, processorCount) processors = make([]processor.Processor, 0, processorCount)
for i := 0; i < processorCount; i++ { for i := 0; i < processorCount; i++ {

View File

@ -142,39 +142,35 @@ func (p *processor) StartMonitoring() {
SELECT mean("tempeture") as tempeture FROM "processor_tempeture" WHERE $timeFilter GROUP BY "processor", time(5s) fill(previous) SELECT mean("tempeture") as tempeture FROM "processor_tempeture" WHERE $timeFilter GROUP BY "processor", time(5s) fill(previous)
*/ */
highestTemp = p.getMaxTempetureOnProcessor(tempeturePathGlob) highestTemp = p.getMaxTempetureOnProcessor(tempeturePathGlob)
if highestTemp != p.tempeture { if p.tempetureChanged != nil {
if p.tempetureChanged != nil { select {
select { case p.tempetureChanged <- TempetureInfo{
case p.tempetureChanged <- TempetureInfo{ Id: p.id,
Id: p.id, Tempeture: highestTemp,
Tempeture: highestTemp, At: now,
At: now, }:
}: default:
default:
}
} }
p.tempeture = highestTemp
log.Debugf("processor %d : tempeture changed %f", p.id, highestTemp)
} }
p.tempeture = highestTemp
log.Debugf("processor %d : tempeture changed %f", p.id, highestTemp)
/* /*
SELECT mean("noob") as noob FROM "processor_cooling_fanspeed" WHERE $timeFilter GROUP BY "processor", time(5s) fill(previous) CREATE CONTINUOUS QUERY "processor_cooling_fanspeed_5s" ON "core" BEGIN SELECT max("noob") AS "mean_noob" INTO "processor_cooling_fanspeed_5s" FROM "processor_cooling_fanspeed" GROUP BY "processor", time(5s) fill(previous) END SELECT mean("noob") as noob FROM "processor_cooling_fanspeed" WHERE $timeFilter GROUP BY "processor", time(5s) fill(previous) CREATE CONTINUOUS QUERY "processor_cooling_fanspeed_5s" ON "core" BEGIN SELECT max("noob") AS "mean_noob" INTO "processor_cooling_fanspeed_5s" FROM "processor_cooling_fanspeed" GROUP BY "processor", time(5s) fill(previous) END
*/ */
fanspeed = p.normalizeFanspeed(p.fanController.Update(highestTemp)) fanspeed = p.normalizeFanspeed(p.fanController.Update(highestTemp))
if fanspeed != p.fanSpeed { if p.fanSpeedChanged != nil {
if p.fanSpeedChanged != nil { select {
select { case p.fanSpeedChanged <- FanspeedInfo{
case p.fanSpeedChanged <- FanspeedInfo{ Id: p.id,
Id: p.id, FanSpeed: fanspeed,
FanSpeed: fanspeed, At: now,
At: now, }:
}: default:
default:
}
} }
p.fanSpeed = fanspeed
log.Debugf("processor %d : fan changed 0x%x", p.id, fanspeed)
} }
p.fanSpeed = fanspeed
log.Debugf("processor %d : fan changed 0x%x", p.id, fanspeed)
case <-p.handler.Done(): case <-p.handler.Done():
return return
} }