Beispiel #1
0
// Sets values for a day. Empty periods are zeroed
func (s *SDayCollect) ValueDay(date epochdate.Date, value map[string]interface{}) {
	switch s.Data {
	case "hour":
		for di := 0; di < 24; di++ {
			// don't add if in past
			if date.UTCTime(di, 0, 0, 0).After(time.Now().UTC()) {
				return
			}
			dy := make(map[string]interface{})
			dy["date"] = date.String()
			dy["hour"] = di

			var fd map[string]interface{}
			if value != nil {
				hvalue := value["_hr"].(map[string]interface{})
				hf, ok := hvalue[fmt.Sprintf("h_%d", di)]
				if ok {
					fd = hf.(map[string]interface{})
				}
			}
			s.addImportData(dy, fd)

			s.setData(fmt.Sprintf("%s@%d", date.String(), di), dy)
		}
	case "minute":
		for di := 0; di < 24; di++ {
			var mvalue map[string]interface{}

			if value != nil {
				hvalue := value["_hr"].(map[string]interface{})
				hf, ok := hvalue[fmt.Sprintf("h_%d", di)]
				if ok {
					mintf, mok := hf.(map[string]interface{})["mn"]
					if mok {
						mvalue = mintf.(map[string]interface{})
					}
				}
			}
			// minutes in 15 minutes increments
			for mi := 0; mi < 4; mi++ {
				if date.UTCTime(di, mi*15, 0, 0).After(time.Now().UTC()) {
					return
				}

				dy := make(map[string]interface{})
				dy["date"] = date.String()
				dy["hour"] = di
				dy["minute"] = mi * 15

				var fd map[string]interface{}
				if mvalue != nil {
					mf, mfok := mvalue[fmt.Sprintf("m_%d", mi*15)]
					if mfok {
						fd = mf.(map[string]interface{})
					}
				}
				s.addImportData(dy, fd)
				s.setData(fmt.Sprintf("%s@%d@%d", date.String(), di, mi*15), dy)
			}
		}
	default:
		dy := make(map[string]interface{})
		dy["date"] = date.String()

		var fd map[string]interface{}
		if value != nil {
			fd = value["_dy"].(map[string]interface{})
		}
		s.addImportData(dy, fd)
		s.setData(fmt.Sprintf("%s", date.String()), dy)
	}
}