@things-factory/dataset 5.0.0-alpha.25 → 5.0.0-alpha.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/pages/{data-entry-form.js → data-entry/data-entry-form.js} +1 -0
- package/client/pages/data-entry/data-entry-list-page.js +360 -0
- package/client/pages/{data-ooc.js → data-ooc/data-ooc-list-page.js} +3 -3
- package/client/pages/{data-ooc-view.js → data-ooc/data-ooc-view.js} +0 -0
- package/client/pages/{data-sample.js → data-sample/data-sample-list-page.js} +3 -3
- package/client/pages/{data-sample-view.js → data-sample/data-sample-view.js} +0 -0
- package/client/pages/{data-sensor.js → data-sensor/data-sensor-list-page.js} +3 -3
- package/client/pages/{data-item-list.js → data-set/data-item-list.js} +0 -0
- package/client/pages/{data-set-importer.js → data-set/data-set-importer.js} +0 -0
- package/client/pages/{data-set.js → data-set/data-set-list-page.js} +10 -7
- package/client/route.js +12 -8
- package/dist-server/controllers/create-data-sample.js +14 -9
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/service/data-set/data-set-query.js +67 -1
- package/dist-server/service/data-set/data-set-query.js.map +1 -1
- package/package.json +17 -16
- package/server/controllers/create-data-sample.ts +21 -13
- package/server/service/data-set/data-set-query.ts +56 -0
- package/things-factory.config.js +12 -8
- package/translations/en.json +5 -1
- package/translations/ko.json +4 -1
- package/translations/ms.json +4 -1
- package/translations/zh.json +4 -1
- package/yarn-error.log +23244 -0
@@ -11,7 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
13
13
|
};
|
14
|
-
var _a;
|
14
|
+
var _a, _b;
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
16
16
|
exports.DataSetQuery = void 0;
|
17
17
|
const type_graphql_1 = require("type-graphql");
|
@@ -21,6 +21,8 @@ const shell_1 = require("@things-factory/shell");
|
|
21
21
|
const data_item_1 = require("../data-item/data-item");
|
22
22
|
const data_set_1 = require("./data-set");
|
23
23
|
const data_set_type_1 = require("./data-set-type");
|
24
|
+
const data_sample_1 = require("../data-sample/data-sample");
|
25
|
+
var parser = require('cron-parser');
|
24
26
|
let DataSetQuery = class DataSetQuery {
|
25
27
|
async dataSet(id, context) {
|
26
28
|
const { domain } = context.state;
|
@@ -34,6 +36,13 @@ let DataSetQuery = class DataSetQuery {
|
|
34
36
|
const [items, total] = await (0, typeorm_1.getRepository)(data_set_1.DataSet).findAndCount(convertedParams);
|
35
37
|
return { items, total };
|
36
38
|
}
|
39
|
+
async dataSetsForEntry(params, context) {
|
40
|
+
const { domain } = context.state;
|
41
|
+
/* TODO. 조회한 사용자가 supervisory 역할을 가진 data-set 리스트만 반환 */
|
42
|
+
const convertedParams = (0, shell_1.convertListParams)(params, domain.id);
|
43
|
+
const [items, total] = await (0, typeorm_1.getRepository)(data_set_1.DataSet).findAndCount(convertedParams);
|
44
|
+
return { items, total };
|
45
|
+
}
|
37
46
|
async dataItems(dataSet) {
|
38
47
|
return await (0, typeorm_1.getRepository)(data_item_1.DataItem).find({
|
39
48
|
dataSet
|
@@ -53,6 +62,34 @@ let DataSetQuery = class DataSetQuery {
|
|
53
62
|
async creator(dataSet) {
|
54
63
|
return await (0, typeorm_1.getRepository)(auth_base_1.User).findOne(dataSet.creatorId);
|
55
64
|
}
|
65
|
+
async latestCollectedAt(dataSet) {
|
66
|
+
const sample = await (0, typeorm_1.getRepository)(data_sample_1.DataSample).findOne({
|
67
|
+
select: ['collectedAt'],
|
68
|
+
where: { dataSet },
|
69
|
+
order: { collectedAt: 'DESC' }
|
70
|
+
});
|
71
|
+
return sample === null || sample === void 0 ? void 0 : sample.collectedAt;
|
72
|
+
}
|
73
|
+
async nextSchedule(dataSet) {
|
74
|
+
const { timezone, schedule } = dataSet;
|
75
|
+
if (!schedule) {
|
76
|
+
return;
|
77
|
+
}
|
78
|
+
var interval = parser.parseExpression(schedule, {
|
79
|
+
tz: timezone
|
80
|
+
});
|
81
|
+
return interval.next().toDate();
|
82
|
+
}
|
83
|
+
async prevSchedule(dataSet) {
|
84
|
+
const { timezone, schedule } = dataSet;
|
85
|
+
if (!schedule) {
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
var interval = parser.parseExpression(schedule, {
|
89
|
+
tz: timezone
|
90
|
+
});
|
91
|
+
return interval.prev().toDate();
|
92
|
+
}
|
56
93
|
};
|
57
94
|
__decorate([
|
58
95
|
(0, type_graphql_1.Directive)('@privilege(category: "data-set", privilege: "query", domainOwnerGranted: true)'),
|
@@ -72,6 +109,14 @@ __decorate([
|
|
72
109
|
__metadata("design:paramtypes", [typeof (_a = typeof shell_1.ListParam !== "undefined" && shell_1.ListParam) === "function" ? _a : Object, Object]),
|
73
110
|
__metadata("design:returntype", Promise)
|
74
111
|
], DataSetQuery.prototype, "dataSets", null);
|
112
|
+
__decorate([
|
113
|
+
(0, type_graphql_1.Query)(returns => data_set_type_1.DataSetList, { description: 'To fetch multiple DataSets for data entry manually' }),
|
114
|
+
__param(0, (0, type_graphql_1.Args)()),
|
115
|
+
__param(1, (0, type_graphql_1.Ctx)()),
|
116
|
+
__metadata("design:type", Function),
|
117
|
+
__metadata("design:paramtypes", [typeof (_b = typeof shell_1.ListParam !== "undefined" && shell_1.ListParam) === "function" ? _b : Object, Object]),
|
118
|
+
__metadata("design:returntype", Promise)
|
119
|
+
], DataSetQuery.prototype, "dataSetsForEntry", null);
|
75
120
|
__decorate([
|
76
121
|
(0, type_graphql_1.FieldResolver)(type => [data_item_1.DataItem]),
|
77
122
|
__param(0, (0, type_graphql_1.Root)()),
|
@@ -107,6 +152,27 @@ __decorate([
|
|
107
152
|
__metadata("design:paramtypes", [data_set_1.DataSet]),
|
108
153
|
__metadata("design:returntype", Promise)
|
109
154
|
], DataSetQuery.prototype, "creator", null);
|
155
|
+
__decorate([
|
156
|
+
(0, type_graphql_1.FieldResolver)(type => Date, { nullable: true }),
|
157
|
+
__param(0, (0, type_graphql_1.Root)()),
|
158
|
+
__metadata("design:type", Function),
|
159
|
+
__metadata("design:paramtypes", [data_set_1.DataSet]),
|
160
|
+
__metadata("design:returntype", Promise)
|
161
|
+
], DataSetQuery.prototype, "latestCollectedAt", null);
|
162
|
+
__decorate([
|
163
|
+
(0, type_graphql_1.FieldResolver)(type => Date, { nullable: true }),
|
164
|
+
__param(0, (0, type_graphql_1.Root)()),
|
165
|
+
__metadata("design:type", Function),
|
166
|
+
__metadata("design:paramtypes", [data_set_1.DataSet]),
|
167
|
+
__metadata("design:returntype", Promise)
|
168
|
+
], DataSetQuery.prototype, "nextSchedule", null);
|
169
|
+
__decorate([
|
170
|
+
(0, type_graphql_1.FieldResolver)(type => Date, { nullable: true }),
|
171
|
+
__param(0, (0, type_graphql_1.Root)()),
|
172
|
+
__metadata("design:type", Function),
|
173
|
+
__metadata("design:paramtypes", [data_set_1.DataSet]),
|
174
|
+
__metadata("design:returntype", Promise)
|
175
|
+
], DataSetQuery.prototype, "prevSchedule", null);
|
110
176
|
DataSetQuery = __decorate([
|
111
177
|
(0, type_graphql_1.Resolver)(data_set_1.DataSet)
|
112
178
|
], DataSetQuery);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-set-query.js","sourceRoot":"","sources":["../../../server/service/data-set/data-set-query.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA8F;AAC9F,qCAAuC;AAEvC,yDAAsD;AACtD,iDAA4E;AAE5E,sDAAiD;AACjD,yCAAoC;AACpC,mDAA6C;
|
1
|
+
{"version":3,"file":"data-set-query.js","sourceRoot":"","sources":["../../../server/service/data-set/data-set-query.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/dataset",
|
3
|
-
"version": "5.0.0-alpha.
|
3
|
+
"version": "5.0.0-alpha.28",
|
4
4
|
"main": "dist-server/index.js",
|
5
5
|
"browser": "client/index.js",
|
6
6
|
"things-factory": true,
|
@@ -24,20 +24,21 @@
|
|
24
24
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
25
25
|
},
|
26
26
|
"dependencies": {
|
27
|
-
"@operato/app": "1.0.0-alpha.
|
28
|
-
"@operato/data-grist": "1.0.0-alpha.
|
29
|
-
"@operato/dataset": "1.0.0-alpha.
|
30
|
-
"@operato/graphql": "1.0.0-alpha.
|
31
|
-
"@operato/i18n": "1.0.0-alpha.
|
32
|
-
"@operato/layout": "1.0.0-alpha.
|
33
|
-
"@operato/shell": "1.0.0-alpha.
|
34
|
-
"@operato/styles": "1.0.0-alpha.
|
35
|
-
"@operato/utils": "1.0.0-alpha.
|
36
|
-
"@things-factory/auth-base": "^5.0.0-alpha.
|
37
|
-
"@things-factory/env": "^5.0.0-alpha.
|
38
|
-
"@things-factory/shell": "^5.0.0-alpha.
|
39
|
-
"@things-factory/work-shift": "^5.0.0-alpha.
|
40
|
-
"
|
27
|
+
"@operato/app": "1.0.0-alpha.51",
|
28
|
+
"@operato/data-grist": "1.0.0-alpha.51",
|
29
|
+
"@operato/dataset": "1.0.0-alpha.51",
|
30
|
+
"@operato/graphql": "1.0.0-alpha.51",
|
31
|
+
"@operato/i18n": "1.0.0-alpha.51",
|
32
|
+
"@operato/layout": "1.0.0-alpha.51",
|
33
|
+
"@operato/shell": "1.0.0-alpha.51",
|
34
|
+
"@operato/styles": "1.0.0-alpha.51",
|
35
|
+
"@operato/utils": "1.0.0-alpha.51",
|
36
|
+
"@things-factory/auth-base": "^5.0.0-alpha.28",
|
37
|
+
"@things-factory/env": "^5.0.0-alpha.28",
|
38
|
+
"@things-factory/shell": "^5.0.0-alpha.28",
|
39
|
+
"@things-factory/work-shift": "^5.0.0-alpha.28",
|
40
|
+
"cron-parser": "^4.3.0",
|
41
|
+
"moment-timezone": "^0.5.34"
|
41
42
|
},
|
42
|
-
"gitHead": "
|
43
|
+
"gitHead": "9adb6cdfd07c7730800f84a2d532d96f0f436288"
|
43
44
|
}
|
@@ -1,15 +1,17 @@
|
|
1
|
-
import
|
1
|
+
import moment from 'moment-timezone'
|
2
|
+
import { EntityManager } from 'typeorm'
|
3
|
+
|
4
|
+
import { User } from '@things-factory/auth-base'
|
2
5
|
import { Domain, getRedirectSubdomainPath, pubsub } from '@things-factory/shell'
|
3
6
|
|
4
7
|
import { DataItem } from '../service/data-item/data-item'
|
8
|
+
import { DataOoc, DataOocStatus } from '../service/data-ooc/data-ooc'
|
5
9
|
import { DataSample } from '../service/data-sample/data-sample'
|
10
|
+
import { NewDataSample } from '../service/data-sample/data-sample-type'
|
6
11
|
import { DataSet } from '../service/data-set/data-set'
|
7
12
|
import { DataUseCase } from './data-use-case'
|
8
|
-
import { EntityManager } from 'typeorm'
|
9
|
-
import { NewDataSample } from '../service/data-sample/data-sample-type'
|
10
|
-
import { User } from '@things-factory/auth-base'
|
11
13
|
import { getWorkDateAndShift } from '@things-factory/work-shift'
|
12
|
-
|
14
|
+
|
13
15
|
|
14
16
|
const debug = require('debug')('things-factory:dataset:controller/save-data-sample')
|
15
17
|
|
@@ -74,13 +76,21 @@ export async function createDataSample(
|
|
74
76
|
}, {})
|
75
77
|
|
76
78
|
const collectedAt = dataSample.collectedAt || new Date()
|
77
|
-
|
79
|
+
// workDate ex) 2022-04-04
|
80
|
+
const { workDate, workShift } = await getWorkDateAndShift(domain, collectedAt)
|
81
|
+
|
82
|
+
const dateFormat = 'YYYY-MM-DD'
|
83
|
+
// local time
|
84
|
+
const timezone = 'Asia/Seoul'
|
85
|
+
|
86
|
+
// const collectedAt = dataSample.collectedAt || new Date()
|
87
|
+
const localDateTz = moment(collectedAt).tz(timezone)
|
78
88
|
const defaultPartitionKeys = {
|
79
89
|
domain: domain.subdomain,
|
80
|
-
datasetid: dataSample.dataSet.id /* It should not be 'data_set_id' as column name duplicated for Glue
|
81
|
-
|
82
|
-
|
83
|
-
|
90
|
+
datasetid: dataSample.dataSet.id, /* It should not be 'data_set_id' as column name duplicated for Glue */
|
91
|
+
date: localDateTz.format(dateFormat), /* local time date */
|
92
|
+
workdate: workDate, /* working date */
|
93
|
+
workshift: workShift
|
84
94
|
}
|
85
95
|
|
86
96
|
var partitionKeys = {
|
@@ -88,14 +98,12 @@ export async function createDataSample(
|
|
88
98
|
...dataSet.partitionKeys
|
89
99
|
}
|
90
100
|
|
91
|
-
partitionKeys = formatDate(partitionKeys,
|
101
|
+
partitionKeys = formatDate(partitionKeys, localDateTz)
|
92
102
|
partitionKeys = replaceVariables(partitionKeys, {
|
93
103
|
...dataSample.data
|
94
104
|
})
|
95
105
|
|
96
106
|
const { ooc, oos } = DataUseCase.evaluate(dataSet, dataItems, dataSample.data) || {}
|
97
|
-
const { workDate, workShift } = await getWorkDateAndShift(domain, collectedAt)
|
98
|
-
|
99
107
|
const result = await tx.getRepository(DataSample).save({
|
100
108
|
name: dataSet.name,
|
101
109
|
description: dataSet.description,
|
@@ -7,6 +7,9 @@ import { convertListParams, Domain, ListParam } from '@things-factory/shell'
|
|
7
7
|
import { DataItem } from '../data-item/data-item'
|
8
8
|
import { DataSet } from './data-set'
|
9
9
|
import { DataSetList } from './data-set-type'
|
10
|
+
import { DataSample } from '../data-sample/data-sample'
|
11
|
+
|
12
|
+
var parser = require('cron-parser')
|
10
13
|
|
11
14
|
@Resolver(DataSet)
|
12
15
|
export class DataSetQuery {
|
@@ -31,6 +34,18 @@ export class DataSetQuery {
|
|
31
34
|
return { items, total }
|
32
35
|
}
|
33
36
|
|
37
|
+
@Query(returns => DataSetList, { description: 'To fetch multiple DataSets for data entry manually' })
|
38
|
+
async dataSetsForEntry(@Args() params: ListParam, @Ctx() context: any): Promise<DataSetList> {
|
39
|
+
const { domain } = context.state
|
40
|
+
|
41
|
+
/* TODO. 조회한 사용자가 supervisory 역할을 가진 data-set 리스트만 반환 */
|
42
|
+
|
43
|
+
const convertedParams = convertListParams(params, domain.id)
|
44
|
+
const [items, total] = await getRepository(DataSet).findAndCount(convertedParams)
|
45
|
+
|
46
|
+
return { items, total }
|
47
|
+
}
|
48
|
+
|
34
49
|
@FieldResolver(type => [DataItem])
|
35
50
|
async dataItems(@Root() dataSet: DataSet): Promise<DataItem[]> {
|
36
51
|
return await getRepository(DataItem).find({
|
@@ -59,4 +74,45 @@ export class DataSetQuery {
|
|
59
74
|
async creator(@Root() dataSet: DataSet): Promise<User> {
|
60
75
|
return await getRepository(User).findOne(dataSet.creatorId)
|
61
76
|
}
|
77
|
+
|
78
|
+
@FieldResolver(type => Date, { nullable: true })
|
79
|
+
async latestCollectedAt(@Root() dataSet: DataSet): Promise<Date> {
|
80
|
+
const sample = await getRepository(DataSample).findOne({
|
81
|
+
select: ['collectedAt'],
|
82
|
+
where: { dataSet },
|
83
|
+
order: { collectedAt: 'DESC' }
|
84
|
+
})
|
85
|
+
|
86
|
+
return sample?.collectedAt
|
87
|
+
}
|
88
|
+
|
89
|
+
@FieldResolver(type => Date, { nullable: true })
|
90
|
+
async nextSchedule(@Root() dataSet: DataSet): Promise<Date> {
|
91
|
+
const { timezone, schedule } = dataSet
|
92
|
+
|
93
|
+
if (!schedule) {
|
94
|
+
return
|
95
|
+
}
|
96
|
+
|
97
|
+
var interval = parser.parseExpression(schedule, {
|
98
|
+
tz: timezone
|
99
|
+
})
|
100
|
+
|
101
|
+
return interval.next().toDate()
|
102
|
+
}
|
103
|
+
|
104
|
+
@FieldResolver(type => Date, { nullable: true })
|
105
|
+
async prevSchedule(@Root() dataSet: DataSet): Promise<Date> {
|
106
|
+
const { timezone, schedule } = dataSet
|
107
|
+
|
108
|
+
if (!schedule) {
|
109
|
+
return
|
110
|
+
}
|
111
|
+
|
112
|
+
var interval = parser.parseExpression(schedule, {
|
113
|
+
tz: timezone
|
114
|
+
})
|
115
|
+
|
116
|
+
return interval.prev().toDate()
|
117
|
+
}
|
62
118
|
}
|
package/things-factory.config.js
CHANGED
@@ -5,20 +5,24 @@ export default {
|
|
5
5
|
route,
|
6
6
|
routes: [
|
7
7
|
{
|
8
|
-
tagname: 'data-set-page',
|
9
|
-
page: 'data-set'
|
8
|
+
tagname: 'data-set-list-page',
|
9
|
+
page: 'data-set-list'
|
10
10
|
},
|
11
11
|
{
|
12
|
-
tagname: 'data-sensor-page',
|
13
|
-
page: 'data-sensor'
|
12
|
+
tagname: 'data-sensor-list-page',
|
13
|
+
page: 'data-sensor-list'
|
14
14
|
},
|
15
15
|
{
|
16
|
-
tagname: 'data-sample-page',
|
17
|
-
page: 'data-sample'
|
16
|
+
tagname: 'data-sample-list-page',
|
17
|
+
page: 'data-sample-list'
|
18
18
|
},
|
19
19
|
{
|
20
|
-
tagname: 'data-ooc-page',
|
21
|
-
page: 'data-ooc'
|
20
|
+
tagname: 'data-ooc-list-page',
|
21
|
+
page: 'data-ooc-list'
|
22
|
+
},
|
23
|
+
{
|
24
|
+
tagname: 'data-entry-list-page',
|
25
|
+
page: 'data-entry-list'
|
22
26
|
}
|
23
27
|
],
|
24
28
|
bootstrap
|
package/translations/en.json
CHANGED
@@ -10,11 +10,14 @@
|
|
10
10
|
"field.data-sample": "data sample",
|
11
11
|
"field.data-set": "data set",
|
12
12
|
"field.device-id": "device id",
|
13
|
+
"field.latest-collected-at": "latest collected at",
|
13
14
|
"field.netmask": "network mask",
|
15
|
+
"field.next-schedule": "next schedule",
|
14
16
|
"field.oos": "out of critical limit",
|
15
17
|
"field.ooc": "out of control limit",
|
16
18
|
"field.options": "options",
|
17
19
|
"field.partition-keys": "partition keys",
|
20
|
+
"field.prev-schedule": "previous schedule",
|
18
21
|
"field.quota": "sampling #",
|
19
22
|
"field.raw-data": "raw data",
|
20
23
|
"field.ref-by": "ref. by",
|
@@ -30,6 +33,7 @@
|
|
30
33
|
"text.data sample created successfully": "a data sample created successfully",
|
31
34
|
"text.data ooc updated successfully": "a data ooc updated successfully",
|
32
35
|
"title.data-entry-form": "data entry form",
|
36
|
+
"title.data-entry list": "data entry list",
|
33
37
|
"title.data-item list": "data item list",
|
34
38
|
"title.data-ooc list": "data OOC list",
|
35
39
|
"title.data-ooc view": "data OOC view",
|
@@ -37,4 +41,4 @@
|
|
37
41
|
"title.data-sample view": "data sample view",
|
38
42
|
"title.data-sensor list": "data sensor list",
|
39
43
|
"title.data-set list": "data set list"
|
40
|
-
}
|
44
|
+
}
|
package/translations/ko.json
CHANGED
@@ -10,11 +10,14 @@
|
|
10
10
|
"field.data-sample": "데이타 샘플",
|
11
11
|
"field.data-set": "데이타셋",
|
12
12
|
"field.device-id": "디바이스 아이디",
|
13
|
+
"field.latest-collected-at": "최근 수집 시간",
|
13
14
|
"field.netmask": "네트워크마스크",
|
15
|
+
"field.next-schedule": "다음 수집계획",
|
14
16
|
"field.oos": "허용한계 이탈여부",
|
15
17
|
"field.ooc": "관리한계 이탈여부",
|
16
18
|
"field.options": "선택옵션",
|
17
19
|
"field.partition-keys": "파티션 키",
|
20
|
+
"field.prev-schedule": "이전 수집계획",
|
18
21
|
"field.quota": "샘플수",
|
19
22
|
"field.raw-data": "데이타 원본",
|
20
23
|
"field.ref-by": "참조아이템",
|
@@ -37,4 +40,4 @@
|
|
37
40
|
"title.data-sample view": "데이타 샘플 상세",
|
38
41
|
"title.data-sensor list": "데이타 센서 조회",
|
39
42
|
"title.data-set list": "데이타 셋 조회"
|
40
|
-
}
|
43
|
+
}
|
package/translations/ms.json
CHANGED
@@ -10,11 +10,14 @@
|
|
10
10
|
"field.data-sample": "data sample",
|
11
11
|
"field.data-set": "data set",
|
12
12
|
"field.device-id": "device id",
|
13
|
+
"field.latest-collected-at": "latest collected at",
|
13
14
|
"field.netmask": "network mask",
|
15
|
+
"field.next-schedule": "next schedule",
|
14
16
|
"field.oos": "out of critical limit",
|
15
17
|
"field.ooc": "out of control limit",
|
16
18
|
"field.options": "options",
|
17
19
|
"field.partition-keys": "partition keys",
|
20
|
+
"field.prev-schedule": "previous schedule",
|
18
21
|
"field.quota": "sampling #",
|
19
22
|
"field.raw-data": "raw data",
|
20
23
|
"field.ref-by": "ref. by",
|
@@ -37,4 +40,4 @@
|
|
37
40
|
"title.data-sample view": "data sample view",
|
38
41
|
"title.data-sensor list": "data sensor list",
|
39
42
|
"title.data-set list": "data set list"
|
40
|
-
}
|
43
|
+
}
|
package/translations/zh.json
CHANGED
@@ -10,11 +10,14 @@
|
|
10
10
|
"field.data-sample": "data sample",
|
11
11
|
"field.data-set": "data set",
|
12
12
|
"field.device-id": "device id",
|
13
|
+
"field.latest-collected-at": "latest collected at",
|
13
14
|
"field.netmask": "network mask",
|
15
|
+
"field.next-schedule": "next schedule",
|
14
16
|
"field.oos": "out of critical limit",
|
15
17
|
"field.ooc": "out of control limit",
|
16
18
|
"field.options": "options",
|
17
19
|
"field.partition-keys": "partition keys",
|
20
|
+
"field.prev-schedule": "previous schedule",
|
18
21
|
"field.quota": "sampling #",
|
19
22
|
"field.raw-data": "raw data",
|
20
23
|
"field.ref-by": "ref. by",
|
@@ -37,4 +40,4 @@
|
|
37
40
|
"title.data-sample view": "data sample view",
|
38
41
|
"title.data-sensor list": "data sensor list",
|
39
42
|
"title.data-set list": "data set list"
|
40
|
-
}
|
43
|
+
}
|