-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprod_grib.go
130 lines (113 loc) · 3.11 KB
/
prod_grib.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package nmc_message_client
import (
"encoding/json"
"fmt"
"math/rand"
"strconv"
"time"
)
func CreateProdGribMessage(
source string,
messageType string,
status string,
datetime int64,
fileName string,
absoluteDataName string,
startTime string,
forecastTime string) ([]byte, error) {
description := ProbGribMessageDescription{
StartTime: startTime,
ForecastTime: forecastTime,
}
descriptionBlob, err := json.Marshal(description)
if err != nil {
return nil, fmt.Errorf("create description for prod-grib error: %s", err)
}
message := MonitorMessage{
Source: source,
MessageType: messageType,
Status: status,
DateTime: datetime,
FileName: fileName,
AbsoluteDataName: absoluteDataName,
Description: string(descriptionBlob),
}
messageBlob, err := json.MarshalIndent(message, "", " ")
if err != nil {
return messageBlob, fmt.Errorf("create message for prod-grib error: %s", err)
}
return messageBlob, nil
}
type ProbGribMessageDescription struct {
StartTime string `json:"startTime,omitempty"`
ForecastTime string `json:"forecastTime,omitempty"`
}
type GribProduction struct {
Offset string `json:"-"`
Source string `json:"source"`
MessageType string `json:"type"`
Status int8 `json:"status"`
DateTime time.Time `json:"datetime,omitempty"`
FileName string `json:"fileName"`
StartTime time.Time `json:"startTime,omitempty"`
ForecastTime string `json:"forecastTime,omitempty"`
}
func CreateProductMessage(
topic string,
source string,
sourceIP string,
messageType string,
dateTime time.Time,
fileName string,
absoluteDataName string,
fileSize int64,
productIntervalHour int32,
status int8,
startTime string,
forecastTime string,
) ([]byte, error) {
timeString := dateTime.Format("2006-01-02 15:04:05")
startTimeClock, _ := time.Parse("2006010215", startTime)
var cstZone = time.FixedZone("CST", 8*3600) // beijing
startTimeClock = startTimeClock.In(cstZone)
forecastHour, _ := strconv.Atoi(forecastTime)
randomNumber := rand.Intn(10000)
description := ProbGribMessageDescription{
StartTime: startTime,
ForecastTime: forecastTime,
}
//descriptionBlob, err := json.Marshal(description)
//if err != nil {
// return nil, fmt.Errorf("create description for prod-grib error: %s", err)
//}
message := MonitorMessageV2{
Topic: topic,
Source: source,
SourceIP: sourceIP,
MessageType: messageType,
Result: status,
DateTime: timeString,
FileNames: fileName,
AbsoluteDataName: absoluteDataName,
FileSizes: fmt.Sprintf("%d", fileSize),
ResultDescription: description,
}
message.ID = fmt.Sprintf(
"%s%05d",
dateTime.Format("20060102150405"),
rand.Intn(100000),
)
message.PID = fmt.Sprintf(
"%s00%02d%04d%04d%04d",
messageType,
startTimeClock.Hour(),
forecastHour,
productIntervalHour,
randomNumber,
)
messageBlob, err := json.MarshalIndent(message, "", " ")
if err != nil {
return messageBlob, fmt.Errorf("create message for prod-grib error: %s", err)
}
return messageBlob, nil
}