Skip to content

Commit d528c50

Browse files
committed
feat(output): cnosdb_subscription plugin add cnosdbv2.4.0 support
1 parent 63efb6b commit d528c50

File tree

4 files changed

+121
-46
lines changed

4 files changed

+121
-46
lines changed

plugins/inputs/cnosdb_subscription/cnosdb/generated/kv_service/kv_service.pb.go

+52-29
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/inputs/cnosdb_subscription/cnosdb/kv_service_impl.go

+1
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ func (s TSKVServiceServerImpl) WriteSubscription(server kv_service.TSKVService_W
152152

153153
var tableSchema cnosdb_v4.TskvTableSchema
154154
if err := json.Unmarshal(req.TableSchema, &tableSchema); err != nil {
155+
s.accumulator.AddError(fmt.Errorf("failed to parse TskvTableSchema: %w", err))
155156
return server.Send(&kv_service.SubscriptionResponse{})
156157
}
157158

plugins/inputs/cnosdb_subscription/cnosdb/v4/tskv_table_schema.go

+63-14
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package v4
22

3-
type ColumnType uint32
3+
type ColumnTypeCode uint32
44

55
const (
6-
ColumnTypeUnknown ColumnType = iota
6+
ColumnTypeUnknown ColumnTypeCode = iota
77
ColumnTypeTag
88
ColumnTypeTime
99
ColumnTypeFieldUnknown
@@ -15,36 +15,37 @@ const (
1515
ColumnTypeFieldGeometry
1616
)
1717

18-
type TimeUnit uint32
18+
type TimeUnitCode uint32
1919

2020
const (
21-
TimeUnitUnknown TimeUnit = iota
21+
TimeUnitUnknown TimeUnitCode = iota
2222
TimeUnitSecond
2323
TimeUnitMillisecond
2424
TimeUnitMicrosecond
2525
TimeUnitNanosecond
2626
)
2727

2828
type TskvTableSchema struct {
29-
Tenant string `json:"tenant"`
30-
Db string `json:"db"`
31-
Name string `json:"name"`
32-
SchemaVersion uint64 `json:"schema_version"`
33-
NextColumnID uint32 `json:"next_column_id"`
34-
Columns []TableColumn `json:"columns"`
35-
ColumnsIndex map[string]uint32 `json:"columns_index"`
29+
// Tenant string `json:"tenant"`
30+
// Db string `json:"db"`
31+
Name string `json:"name"`
32+
// SchemaId uint64 `json:"schema_id"` // v2.4.0 field
33+
// SchemaVersion uint64 `json:"schema_version"` // v2.4.1 field
34+
// NextColumnID uint32 `json:"next_column_id"`
35+
Columns []TableColumn `json:"columns"`
36+
// ColumnsIndex map[string]uint32 `json:"columns_index"`
3637
}
3738

3839
type TableColumn struct {
3940
ID uint64 `json:"id"`
4041
Name string `json:"name"`
4142
ColumnType interface{} `json:"column_type"`
42-
Encoding interface{} `json:"encoding"`
43+
// Encoding interface{} `json:"encoding"`
4344
}
4445

4546
type ColumnTypeUnited struct {
46-
ColumnType ColumnType
47-
TimeUnit TimeUnit
47+
ColumnType ColumnTypeCode
48+
TimeUnit TimeUnitCode
4849
}
4950

5051
func (c *TableColumn) GetColumnTypeUnited() ColumnTypeUnited {
@@ -56,6 +57,54 @@ func (c *TableColumn) GetColumnTypeUnited() ColumnTypeUnited {
5657
ColumnType: ColumnTypeTag,
5758
TimeUnit: TimeUnitUnknown,
5859
}
60+
} else {
61+
// In cnosdb-v2.4.0, columnType is string
62+
// After cnosdb-v2.4.0, columnType is string or object
63+
columnTypeCode := ColumnTypeUnknown
64+
timeUnitCode := TimeUnitUnknown
65+
switch columnType {
66+
case "TAG_STRING":
67+
// "column_type": "TAG_STRING"
68+
return ColumnTypeUnited{
69+
ColumnType: ColumnTypeTag,
70+
TimeUnit: TimeUnitUnknown,
71+
}
72+
case "FIELD_STRING":
73+
// "column_type": "FIELD_STRING"
74+
columnTypeCode = ColumnTypeFieldString
75+
case "FIELD_BIGINT":
76+
// "column_type": "FIELD_BIGINT""
77+
columnTypeCode = ColumnTypeFieldInteger
78+
case "FIELD_BIGINT UNSIGNED":
79+
// "column_type": "FIELD_BIGINT UNSIGNED""
80+
columnTypeCode = ColumnTypeFieldUnsigned
81+
case "FIELD_DOUBLE":
82+
// "column_type": "FIELD_STRING"
83+
columnTypeCode = ColumnTypeFieldFloat
84+
case "FIELD_BOOLEAN":
85+
// "column_type": "FIELD_BOOLEAN""
86+
columnTypeCode = ColumnTypeFieldBoolean
87+
case "TIME_TIMESTAMP(SECOND)":
88+
// "column_type": "TIME_TIMESTAMP(SECOND)""
89+
columnTypeCode = ColumnTypeTime
90+
timeUnitCode = TimeUnitSecond
91+
case "TIME_TIMESTAMP(MILLISECOND)":
92+
// "column_type": "TIME_TIMESTAMP(MILLISECOND)""
93+
columnTypeCode = ColumnTypeTime
94+
timeUnitCode = TimeUnitMillisecond
95+
case "TIME_TIMESTAMP(MICROSECOND)":
96+
// "column_type": "TIME_TIMESTAMP(MICROSECOND)""
97+
columnTypeCode = ColumnTypeTime
98+
timeUnitCode = TimeUnitMicrosecond
99+
case "TIME_TIMESTAMP(NANOSECOND)":
100+
// "column_type": "TIME_TIMESTAMP(NANOSECOND)""
101+
columnTypeCode = ColumnTypeTime
102+
timeUnitCode = TimeUnitNanosecond
103+
}
104+
return ColumnTypeUnited{
105+
ColumnType: columnTypeCode,
106+
TimeUnit: timeUnitCode,
107+
}
59108
}
60109
case map[string]interface{}:
61110
if timeUnitObj := columnType["Time"]; timeUnitObj != nil {

plugins/inputs/cnosdb_subscription/protocol/kv_service.proto

+5-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ message WritePointsResponse {
2424

2525
// CnosDB subscription v4 message.
2626
message SubscriptionRequest {
27-
uint32 precision = 1;
28-
bytes table_schema = 2;
29-
bytes record_data = 3;
27+
string tenant = 1;
28+
string db = 2;
29+
bytes table_schema = 3;
30+
bytes record_data = 4;
31+
uint32 precision = 5;
3032
}
3133

3234
// CnosDB subscription v4 message.

0 commit comments

Comments
 (0)