diff --git a/broker/src/asapo_broker/database/database.go b/broker/src/asapo_broker/database/database.go
index 56a07d25a143165a12b0129aa647f723e253d7cb..0fa68f2a275c3c2bcd0a0f273b4e9000cd0899e3 100644
--- a/broker/src/asapo_broker/database/database.go
+++ b/broker/src/asapo_broker/database/database.go
@@ -43,7 +43,7 @@ func (request *Request) DbName() string {
 }
 
 type Agent interface {
-	ProcessRequest(request Request) ([]byte, error)
+	ProcessRequest(request Request) ([]byte, error, uint64)
 	Ping() error
 	Connect(string) error
 	Close()
diff --git a/broker/src/asapo_broker/database/mock_database.go b/broker/src/asapo_broker/database/mock_database.go
index 574a8aa5161a133454dccdaf6d85cdda9e4f4b7e..c49c21777e1badcc5f0f366105ef2a5768a60a90 100644
--- a/broker/src/asapo_broker/database/mock_database.go
+++ b/broker/src/asapo_broker/database/mock_database.go
@@ -1,3 +1,4 @@
+//go:build !release
 // +build !release
 
 package database
@@ -28,8 +29,7 @@ func (db *MockedDatabase) SetSettings(settings DBSettings) {
 	db.Called()
 }
 
-
-func (db *MockedDatabase) ProcessRequest(request Request) (answer []byte, err error) {
+func (db *MockedDatabase) ProcessRequest(request Request) (answer []byte, err error, idx uint64) {
 	args := db.Called(request)
-	return args.Get(0).([]byte), args.Error(1)
+	return args.Get(0).([]byte), args.Error(1), 0
 }
diff --git a/broker/src/asapo_broker/database/mongodb.go b/broker/src/asapo_broker/database/mongodb.go
index 5b3caf4fa0797caf0ad37119e4ee55bbb72f217b..93ff399f20e343c9f8ec01f8fee7a6332d4d01d5 100644
--- a/broker/src/asapo_broker/database/mongodb.go
+++ b/broker/src/asapo_broker/database/mongodb.go
@@ -410,19 +410,20 @@ func (db *Mongodb) getEarliestRawRecord(dbname string, collection_name string) (
 	return db.getRawRecordWithSort(dbname, collection_name, "timestamp", 1)
 }
 
-func (db *Mongodb) getRecordByID(request Request) ([]byte, error) {
+func (db *Mongodb) getRecordByID(request Request) ([]byte, error, uint64) {
 	var params ExtraParamId
 	err := json.Unmarshal([]byte(request.ExtraParam), &params)
 	if err != nil {
-		return nil, &DBError{utils.StatusWrongInput, err.Error()}
+		return nil, &DBError{utils.StatusWrongInput, err.Error()}, 0
 	}
 
 	max_ind, err := db.getMaxIndex(request, true, params.IdKey)
 	if err != nil {
-		return nil, err
+		return nil, err, 0
 	}
 
-	return db.getRecordByIDRaw(request, params.Id, max_ind, params.IdKey)
+	data, err := db.getRecordByIDRaw(request, params.Id, max_ind, params.IdKey)
+	return data, err, uint64(params.Id)
 }
 
 func (db *Mongodb) negAckRecord(request Request) ([]byte, error) {
@@ -757,11 +758,11 @@ func checkStreamFinished(request Request, id, id_max int, data map[string]interf
 	return &DBError{utils.StatusNoData, answer}
 }
 
-func (db *Mongodb) getNextRecord(request Request) ([]byte, error) {
+func (db *Mongodb) getNextRecord(request Request) ([]byte, error, uint64) {
 	var params ExtraParamNext
 	err := json.Unmarshal([]byte(request.ExtraParam), &params)
 	if err != nil {
-		return nil, errors.New("fails to extract request parameters: " + err.Error())
+		return nil, errors.New("fails to extract request parameters: " + err.Error()), 0
 	}
 	request.Logger().Debug("get next by : ", params.IdKey)
 
@@ -769,7 +770,7 @@ func (db *Mongodb) getNextRecord(request Request) ([]byte, error) {
 	var nextInd int
 	data, nextInd, err = db.getRecordFromInprocessed(request, params, nil, false)
 	if err != nil {
-		return nil, err
+		return nil, err, 0
 	}
 
 	missingInd := 0
@@ -790,7 +791,7 @@ func (db *Mongodb) getNextRecord(request Request) ([]byte, error) {
 		errUpdate := db.InsertToInprocessIfNeeded(request.DbName(),
 			inprocess_collection_name_prefix+request.Stream+"_"+request.GroupId, missingInd, params)
 		if errUpdate != nil {
-			return nil, errUpdate
+			return nil, errUpdate, 0
 		}
 	}
 
@@ -798,18 +799,19 @@ func (db *Mongodb) getNextRecord(request Request) ([]byte, error) {
 		err_update := db.InsertToInprocessIfNeeded(request.DbName(),
 			inprocess_collection_name_prefix+request.Stream+"_"+request.GroupId, nextInd, params)
 		if err_update != nil {
-			return nil, err_update
+			return nil, err_update, 0
 		}
 	}
-	return data, err
+	return data, err, uint64(nextInd)
 }
 
-func (db *Mongodb) getLastRecord(request Request, idKey string) ([]byte, error) {
+func (db *Mongodb) getLastRecord(request Request, idKey string) ([]byte, error, uint64) {
 	max_ind, err := db.getMaxIndex(request, false, idKey)
 	if err != nil {
-		return nil, err
+		return nil, err, 0
 	}
-	return db.getRecordByIDRaw(request, max_ind, max_ind, idKey)
+	data, err := db.getRecordByIDRaw(request, max_ind, max_ind, idKey)
+	return data, err, uint64(max_ind)
 }
 
 func (db *Mongodb) getLastRecordInGroup(request Request, idKey string) ([]byte, error) {
@@ -1263,52 +1265,55 @@ func (db *Mongodb) getDatasources(request Request) ([]byte, error) {
 	return json.Marshal(&res)
 }
 
-func (db *Mongodb) ProcessRequest(request Request) (answer []byte, err error) {
+func (db *Mongodb) ProcessRequest(request Request) (answer []byte, err error, idx uint64) {
 	dbClientLock.RLock()
 	defer dbClientLock.RUnlock()
 
 	if err := db.checkDatabaseOperationPrerequisites(request); err != nil {
-		return nil, err
+		return nil, err, 0
 	}
 
 	if err := encodeRequest(&request); err != nil {
-		return nil, err
+		return nil, err, 0
 	}
 
+	idx = 0
 	switch request.Op {
 	case "next":
-		return db.getNextRecord(request)
+		answer, err, idx = db.getNextRecord(request)
 	case "id":
-		return db.getRecordByID(request)
+		answer, err, idx = db.getRecordByID(request)
 	case "last":
-		return db.getLastRecord(request, "_id")
+		answer, err, idx = db.getLastRecord(request, "_id")
 	case "groupedlast":
-		return db.getLastRecordInGroup(request, "_id")
+		answer, err = db.getLastRecordInGroup(request, "_id")
 	case "resetcounter":
-		return db.resetCounter(request)
+		answer, err = db.resetCounter(request)
 	case "size":
-		return db.getSize(request)
+		answer, err = db.getSize(request)
 	case "meta":
-		return db.getMeta(request)
+		answer, err = db.getMeta(request)
 	case "querymessages":
-		return db.queryMessages(request)
+		answer, err = db.queryMessages(request)
 	case "streams":
-		return db.getStreams(request)
+		answer, err = db.getStreams(request)
 	case "datasources":
-		return db.getDatasources(request)
+		answer, err = db.getDatasources(request)
 	case "ackmessage":
-		return db.ackRecord(request)
+		answer, err = db.ackRecord(request)
 	case "negackmessage":
-		return db.negAckRecord(request)
+		answer, err = db.negAckRecord(request)
 	case "nacks":
-		return db.nacks(request)
+		answer, err = db.nacks(request)
 	case "lastack":
-		return db.lastAck(request)
+		answer, err = db.lastAck(request)
 	case "delete_stream":
-		return db.deleteStream(request)
+		answer, err = db.deleteStream(request)
 	case "persist_stream":
-		return db.persistStream(request)
+		answer, err = db.persistStream(request)
+	default:
+		answer, err = nil, errors.New("Wrong db operation: "+request.Op)
 	}
 
-	return nil, errors.New("Wrong db operation: " + request.Op)
+	return answer, err, idx
 }
diff --git a/broker/src/asapo_broker/database/mongodb_test.go b/broker/src/asapo_broker/database/mongodb_test.go
index 8aeebf054605638da32ba464320eb25834807f7c..2ec2d5fe8883bcc4d7ca0d590467c50c2366862b 100644
--- a/broker/src/asapo_broker/database/mongodb_test.go
+++ b/broker/src/asapo_broker/database/mongodb_test.go
@@ -127,31 +127,31 @@ func TestMongoDBConnectOK(t *testing.T) {
 }
 
 func TestMongoDBGetNextErrorWhenNotConnected(t *testing.T) {
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next"})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next"})
 	assert.Equal(t, utils.StatusServiceUnavailable, err.(*DBError).Code)
 }
 
 func TestMongoDBGetMetaErrorWhenNotConnected(t *testing.T) {
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "meta", ExtraParam: "0"})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "meta", ExtraParam: "0"})
 	assert.Equal(t, utils.StatusServiceUnavailable, err.(*DBError).Code)
 }
 
 func TestMongoDBQueryMessagesErrorWhenNotConnected(t *testing.T) {
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "querymessages", ExtraParam: "0"})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "querymessages", ExtraParam: "0"})
 	assert.Equal(t, utils.StatusServiceUnavailable, err.(*DBError).Code)
 }
 
 func TestMongoDBGetNextErrorWhenWrongDatabasename(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
-	_, err := db.ProcessRequest(Request{Stream: collection, GroupId: groupId, Op: "next"})
+	_, err, _ := db.ProcessRequest(Request{Stream: collection, GroupId: groupId, Op: "next"})
 	assert.Equal(t, utils.StatusWrongInput, err.(*DBError).Code)
 }
 
 func TestMongoDBGetNextErrorWhenNonExistingDatacollectionname(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource,
 		Stream: "bla", GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":0,\"id_max\":0,\"next_stream\":\"\"}", err.Error())
@@ -160,7 +160,7 @@ func TestMongoDBGetNextErrorWhenNonExistingDatacollectionname(t *testing.T) {
 func TestMongoDBGetLastErrorWhenNonExistingDatacollectionname(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: "bla", GroupId: groupId, Op: "last"})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: "bla", GroupId: groupId, Op: "last"})
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":0,\"id_max\":0,\"next_stream\":\"\"}", err.Error())
 }
@@ -172,7 +172,7 @@ func TestMongoDBGetByIdErrorWhenNoData(t *testing.T) {
 		Id:    2,
 		IdKey: "_id"}
 	encoded, _ := json.Marshal(extraParam)
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "id", ExtraParam: string(encoded)})
 
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":2,\"id_max\":0,\"next_stream\":\"\"}", err.Error())
@@ -184,7 +184,7 @@ func TestMongoDBGetNextIfMissingID(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
 	db.insertRecord(dbname, collection, &userRec2)
-	rec, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	rec, _, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("time_id", false, 0, -1)})
 	assert.Equal(t, string(userRec2_expect), string(rec))
 
@@ -194,7 +194,7 @@ func TestMongoDBGetNextOK(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
 	db.insertRecord(dbname, collection, &rec1)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec1_expect), string(res))
@@ -207,7 +207,7 @@ func TestMongoDBGetNextErrorOnFinishedStream(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec_finished)
 
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"next1\"}", err.(*DBError).Message)
@@ -221,7 +221,7 @@ func TestMongoDBGetNextErrorOnFinishedStreamAlways(t *testing.T) {
 
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"next1\"}", err.(*DBError).Message)
@@ -237,7 +237,7 @@ func TestMongoDBGetByIdErrorOnFinishedStream(t *testing.T) {
 		Id:    2,
 		IdKey: "_id"}
 	encoded, _ := json.Marshal(extraParam)
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "id", ExtraParam: string(encoded)})
 
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
@@ -250,7 +250,7 @@ func TestMongoDBGetLastErrorOnFinishedStream(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec_finished)
 
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "last"})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "last"})
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"next1\"}", err.(*DBError).Message)
 }
@@ -260,7 +260,7 @@ func TestMongoDBGetNextErrorOnNoMoreData(t *testing.T) {
 	defer cleanup()
 	db.insertRecord(dbname, collection, &rec1)
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"\"}", err.(*DBError).Message)
@@ -271,8 +271,8 @@ func TestMongoDBGetNextCorrectOrder(t *testing.T) {
 	defer cleanup()
 	db.insertRecord(dbname, collection, &rec2)
 	db.insertRecord(dbname, collection, &rec1)
-	res1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
-	res2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
+	res1, _, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
+	res2, _, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	assert.Equal(t, string(rec1_expect), string(res1))
 	assert.Equal(t, string(rec2_expect), string(res2))
 }
@@ -306,7 +306,7 @@ func getRecords(n int, resend bool) []int {
 		go func() {
 			defer wg.Done()
 			// fmt.Println("REquest ", string(encoded))
-			res_bin, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+			res_bin, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 				GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
 			if err != nil {
 				fmt.Println("error at read ", i, string(res_bin))
@@ -358,7 +358,7 @@ func TestMongoDBGetLastAfterErasingDatabase(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "last", ExtraParam: "0"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "last", ExtraParam: "0"})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec2_expect), string(res))
 }
@@ -385,7 +385,7 @@ func TestMongoDBGetNextEmptyAfterErasingDatabase(t *testing.T) {
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	db.dropDatabase(dbname)
 
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":0,\"id_max\":0,\"next_stream\":\"\"}", err.Error())
@@ -399,7 +399,7 @@ func TestMongoDBgetRecordByID(t *testing.T) {
 		Id:    1,
 		IdKey: "_id"}
 	encoded, _ := json.Marshal(extraParam)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "id", ExtraParam: string(encoded)})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec1_expect), string(res))
@@ -413,7 +413,7 @@ func TestMongoDBgetRecordByIDFails(t *testing.T) {
 		Id:    2,
 		IdKey: "_id"}
 	encoded, _ := json.Marshal(extraParam)
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "id", ExtraParam: string(encoded)})
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":2,\"id_max\":1,\"next_stream\":\"\"}", err.Error())
@@ -423,7 +423,7 @@ func TestMongoDBGetRecordNext(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
 	db.insertRecord(dbname, collection, &rec1)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec1_expect), string(res))
@@ -434,9 +434,9 @@ func TestMongoDBGetRecordNextMultipleCollections(t *testing.T) {
 	defer cleanup()
 	db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection2, &rec_dataset1)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
-	res_string, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection2,
+	res_string, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection2,
 		GroupId: groupId, Op: "next", DatasetOp: true, ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	var res_ds TestDataset
 	json.Unmarshal(res_string, &res_ds)
@@ -457,7 +457,7 @@ func TestMongoDBGetRecordID(t *testing.T) {
 		Id:    1,
 		IdKey: "_id"}
 	encoded, _ := json.Marshal(extraParam)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "id", ExtraParam: string(encoded)})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec1_expect), string(res))
@@ -467,7 +467,7 @@ func TestMongoDBWrongOp(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
 	db.insertRecord(dbname, collection, &rec1)
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "bla"})
 	assert.NotNil(t, err)
 }
@@ -478,7 +478,7 @@ func TestMongoDBGetRecordLast(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "last", ExtraParam: "0"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "last", ExtraParam: "0"})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec2_expect), string(res))
 }
@@ -489,12 +489,12 @@ func TestMongoDBGetNextAfterGetLastCorrect(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "last", ExtraParam: "0"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "last", ExtraParam: "0"})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec2_expect), string(res))
 
 	db.insertRecord(dbname, collection, &rec3)
-	res, err = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec1_expect), string(res))
@@ -507,12 +507,12 @@ func TestMongoDBGetGetLastInGroupCorrect(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec1)
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)}) // to check it does not influence groupedlast
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec1_expect), string(res))
 
 	// first record - ok, then error
-	res, err = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
+	res, err, _ = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
 	assert.NotNil(t, err)
 	if err != nil {
 		assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
@@ -520,15 +520,15 @@ func TestMongoDBGetGetLastInGroupCorrect(t *testing.T) {
 	}
 	// second record - ok, then error
 	db.insertRecord(dbname, collection, &rec2)
-	res, err = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
+	res, err, _ = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec2_expect), string(res))
-	res, err = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
+	res, err, _ = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
 	assert.NotNil(t, err)
 
 	// stream finished - immediately error
 	db.insertRecord(dbname, collection, &rec_finished3)
-	res, err = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
+	res, err, _ = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
 	assert.NotNil(t, err)
 	if err != nil {
 		assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
@@ -543,9 +543,9 @@ func TestMongoDBGetGetLastInGroupImmediateErrorOnFinishStream(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
 	db.insertRecord(dbname, collection, &rec_finished3)
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
 	assert.NotNil(t, err)
-	_, err = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
+	_, err, _ = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "groupedlast", ExtraParam: ""})
 	assert.NotNil(t, err)
 	if err != nil {
 		assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
@@ -560,7 +560,7 @@ func TestMongoDBGetSize(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec2)
 	db.insertRecord(dbname, collection, &rec3)
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size"})
 	assert.Nil(t, err)
 	assert.Equal(t, string(recs1_expect), string(res))
 }
@@ -571,7 +571,7 @@ func TestMongoDBGetSizeWithFinishedStream(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec_finished)
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size"})
 	assert.Nil(t, err)
 	var rec_expect, _ = json.Marshal(&SizeRecord{1})
 	assert.Equal(t, string(rec_expect), string(res))
@@ -582,10 +582,10 @@ func TestMongoDBGetSizeForDatasets(t *testing.T) {
 	defer cleanup()
 	db.insertRecord(dbname, collection, &rec1)
 
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size", ExtraParam: "false"})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size", ExtraParam: "false"})
 	assert.Equal(t, utils.StatusWrongInput, err.(*DBError).Code)
 
-	_, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size", ExtraParam: "true"})
+	_, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size", ExtraParam: "true"})
 	assert.Equal(t, utils.StatusWrongInput, err1.(*DBError).Code)
 }
 
@@ -595,7 +595,7 @@ func TestMongoDBGetSizeForDatasetsWithFinishedStream(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec_dataset1_incomplete)
 	db.insertRecord(dbname, collection, &rec_finished)
 
-	res, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size", ExtraParam: "true"})
+	res, _, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size", ExtraParam: "true"})
 
 	var rec_expect, _ = json.Marshal(&SizeRecord{1})
 	assert.Equal(t, string(rec_expect), string(res))
@@ -610,7 +610,7 @@ func TestMongoDBGetSizeDataset(t *testing.T) {
 
 	size2_expect, _ := json.Marshal(SizeRecord{2})
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size", ExtraParam: "true"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size", ExtraParam: "true"})
 	assert.Nil(t, err)
 	assert.Equal(t, string(size2_expect), string(res))
 }
@@ -619,7 +619,7 @@ func TestMongoDBGetSizeNoRecords(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "size"})
 	assert.Nil(t, err)
 	assert.Equal(t, string(recs2_expect), string(res))
 }
@@ -637,7 +637,7 @@ func TestMongoPingNotConected(t *testing.T) {
 }
 
 func TestMongoDBgetRecordByIDNotConnected(t *testing.T) {
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "id", ExtraParam: "1"})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "id", ExtraParam: "1"})
 	assert.Equal(t, utils.StatusServiceUnavailable, err.(*DBError).Code)
 }
 
@@ -646,15 +646,15 @@ func TestMongoDBResetCounter(t *testing.T) {
 	defer cleanup()
 	db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
-	res1, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
+	res1, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 
 	assert.Nil(t, err1)
 	assert.Equal(t, string(rec1_expect), string(res1))
 
-	_, err_reset := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "resetcounter", ExtraParam: "1"})
+	_, err_reset, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "resetcounter", ExtraParam: "1"})
 	assert.Nil(t, err_reset)
 
-	res2, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
+	res2, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 
 	assert.Nil(t, err2)
 	assert.Equal(t, string(rec2_expect), string(res2))
@@ -666,7 +666,7 @@ func TestMongoDBGetMetaBtOK(t *testing.T) {
 	rec_expect, _ := json.Marshal(recbt.Meta)
 	db.insertMeta(dbname, &recbt)
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: "whatever", Op: "meta", ExtraParam: "0"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: "whatever", Op: "meta", ExtraParam: "0"})
 
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec_expect), string(res))
@@ -681,7 +681,7 @@ func TestMongoDBGetDatasets(t *testing.T) {
 	db.insertRecord(beamtime+"_test03", collection, &rec_dataset1)
 	db.insertRecord("_test04", collection, &rec_dataset1)
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: "whatever", Op: "datasources", ExtraParam: "0"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: "whatever", Op: "datasources", ExtraParam: "0"})
 
 	assert.Nil(t, err)
 	assert.Equal(t, "{\"sources\":[\"test01\",\"test02\",\"test03\"]}", string(res))
@@ -694,7 +694,7 @@ func TestMongoDBGetMetaStOK(t *testing.T) {
 	rec_expect, _ := json.Marshal(recst.Meta)
 	db.insertMeta(dbname, &recst)
 
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "meta", ExtraParam: "1"})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "meta", ExtraParam: "1"})
 
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec_expect), string(res))
@@ -704,7 +704,7 @@ func TestMongoDBGetMetaErr(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
 
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "meta", ExtraParam: "1"})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "meta", ExtraParam: "1"})
 	assert.NotNil(t, err)
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 }
@@ -780,7 +780,7 @@ func TestMongoDBQueryMessagesOK(t *testing.T) {
 		//			continue
 		//		}
 
-		res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "querymessages", ExtraParam: test.query})
+		res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "querymessages", ExtraParam: test.query})
 		var res []TestRecordMeta
 		json.Unmarshal(res_string, &res)
 		//		fmt.Println(string(res_string))
@@ -799,7 +799,7 @@ func TestMongoDBQueryMessagesOnEmptyDatabase(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
 	for _, test := range tests {
-		res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "querymessages", ExtraParam: test.query})
+		res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, Op: "querymessages", ExtraParam: test.query})
 		var res []TestRecordMeta
 		json.Unmarshal(res_string, &res)
 		assert.Equal(t, 0, len(res))
@@ -824,7 +824,7 @@ func TestMongoDBGetDataset(t *testing.T) {
 	defer cleanup()
 
 	db.insertRecord(dbname, collection, &rec_dataset1)
-	res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", DatasetOp: true, ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 
 	assert.Nil(t, err)
@@ -840,7 +840,7 @@ func TestMongoDBNoDataOnNotCompletedFirstDataset(t *testing.T) {
 	defer cleanup()
 
 	db.insertRecord(dbname, collection, &rec_dataset1_incomplete)
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next",
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next",
 		DatasetOp: true, ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 
 	assert.Equal(t, utils.StatusPartialData, err.(*DBError).Code)
@@ -855,9 +855,9 @@ func TestMongoDBNoDataOnNotCompletedNextDataset(t *testing.T) {
 
 	db.insertRecord(dbname, collection, &rec_dataset1_incomplete)
 	db.insertRecord(dbname, collection, &rec_dataset2_incomplete)
-	_, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", DatasetOp: true, ExtraParam: getExtraParamNext("_id", false, 0, -1)})
-	_, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", DatasetOp: true, ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 
 	assert.Equal(t, utils.StatusPartialData, err1.(*DBError).Code)
@@ -874,7 +874,7 @@ func TestMongoDBGetRecordLastDataSetSkipsIncompleteSets(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec_dataset1)
 	db.insertRecord(dbname, collection, &rec_dataset2)
 
-	res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "last", DatasetOp: true, ExtraParam: "0"})
 
 	assert.Nil(t, err)
@@ -892,7 +892,7 @@ func TestMongoDBGetRecordLastDataSetReturnsIncompleteSets(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec_dataset1)
 	db.insertRecord(dbname, collection, &rec_dataset2)
 
-	res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "last",
 		DatasetOp: true, MinDatasetSize: 3, ExtraParam: "0"})
 
@@ -911,7 +911,7 @@ func TestMongoDBGetRecordLastDataSetSkipsIncompleteSetsWithMinSize(t *testing.T)
 	db.insertRecord(dbname, collection, &rec_dataset1)
 	db.insertRecord(dbname, collection, &rec_dataset2_incomplete3)
 
-	res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "last",
 		DatasetOp: true, MinDatasetSize: 3, ExtraParam: "0"})
 
@@ -929,7 +929,7 @@ func TestMongoDBGetRecordLastDataSetWithFinishedStream(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec_dataset1)
 	db.insertRecord(dbname, collection, &rec_finished)
 
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "last",
 		DatasetOp: true, ExtraParam: "0"})
 
@@ -947,7 +947,7 @@ func TestMongoDBGetRecordLastDataSetWithIncompleteDatasetsAndFinishedStreamRetur
 	db.insertRecord(dbname, collection, &rec_dataset1_incomplete)
 	db.insertRecord(dbname, collection, &rec_finished)
 
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "last",
 		DatasetOp: true, MinDatasetSize: 2, ExtraParam: "0"})
 
@@ -965,7 +965,7 @@ func TestMongoDBGetRecordLastDataSetOK(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec_dataset1)
 	db.insertRecord(dbname, collection, &rec_dataset3)
 
-	res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "last", DatasetOp: true, ExtraParam: "0"})
 
 	assert.Nil(t, err)
@@ -984,7 +984,7 @@ func TestMongoDBGetDatasetID(t *testing.T) {
 		Id:    1,
 		IdKey: "_id"}
 	encoded, _ := json.Marshal(extraParam)
-	res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "id", DatasetOp: true, ExtraParam: string(encoded)})
 
 	assert.Nil(t, err)
@@ -1004,7 +1004,7 @@ func TestMongoDBErrorOnIncompleteDatasetID(t *testing.T) {
 		Id:    1,
 		IdKey: "_id"}
 	encoded, _ := json.Marshal(extraParam)
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "id", DatasetOp: true, ExtraParam: string(encoded)})
 
 	assert.Equal(t, utils.StatusPartialData, err.(*DBError).Code)
@@ -1022,13 +1022,13 @@ func TestMongoDBGetNextRecoverAfterIncompleteDataset(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec_dataset1_incomplete)
 	db.insertRecord(dbname, collection, &rec_dataset2_incomplete)
 
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 3),
 		DatasetOp: true, MinDatasetSize: 0})
 	assert.Equal(t, utils.StatusPartialData, err.(*DBError).Code)
 
 	db.replaceRecord(dbname, 1, collection, &rec_dataset1)
-	res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 3),
 		DatasetOp: true, MinDatasetSize: 0})
 
@@ -1044,17 +1044,17 @@ func TestMongoDBGetNextUserKeyMissingID(t *testing.T) {
 	defer cleanup()
 	db.insertRecord(dbname, collection, &userRec2)
 
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
 
 	assert.Equal(t, utils.StatusNoData, err.(*DBError).Code)
 	assert.Equal(t, "{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":2,\"next_stream\":\"\"}", err.Error())
 
 	db.insertRecord(dbname, collection, &userRec1)
-	rec1, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	rec1, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
 
-	rec2, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	rec2, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
 
 	assert.Equal(t, string(userRec1_expect), string(rec2))
@@ -1069,7 +1069,7 @@ func TestMongoDBOkOnIncompleteDatasetID(t *testing.T) {
 		Id:    1,
 		IdKey: "_id"}
 	encoded, _ := json.Marshal(extraParam)
-	res_string, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res_string, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "id", DatasetOp: true, MinDatasetSize: 3, ExtraParam: string(encoded)})
 
 	assert.Nil(t, err)
@@ -1116,7 +1116,7 @@ func TestMongoDBListStreams(t *testing.T) {
 		}
 		var rec_streams_expect, _ = json.Marshal(test.expectedStreams)
 
-		res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: "0", Op: "streams",
+		res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: "0", Op: "streams",
 			ExtraParam: `{"from":"` + test.from + `","filter":"","detailed":"True"}`})
 		if test.ok {
 			assert.Nil(t, err, test.test)
@@ -1138,7 +1138,7 @@ func TestMongoDBAckMessage(t *testing.T) {
 	query_str := "{\"Id\":1,\"Op\":\"ackmessage\"}"
 
 	request := Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "ackmessage", ExtraParam: query_str}
-	res, err := db.ProcessRequest(request)
+	res, err, _ := db.ProcessRequest(request)
 	nacks, _ := db.getNacks(request, 0, 0)
 	assert.Nil(t, err)
 	assert.Equal(t, "", string(res))
@@ -1179,7 +1179,7 @@ func TestMongoDBNacks(t *testing.T) {
 			db.ackRecord(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, ExtraParam: "{\"Id\":4,\"Op\":\"ackmessage\"}"})
 		}
 
-		res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "nacks", ExtraParam: test.rangeString})
+		res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "nacks", ExtraParam: test.rangeString})
 		if test.ok {
 			assert.Nil(t, err, test.test)
 			assert.Equal(t, test.resString, string(res), test.test)
@@ -1214,7 +1214,7 @@ func TestMongoDBLastAcks(t *testing.T) {
 			db.ackRecord(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, ExtraParam: "{\"Id\":4,\"Op\":\"ackmessage\"}"})
 		}
 
-		res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "lastack"})
+		res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "lastack"})
 		assert.Nil(t, err, test.test)
 		assert.Equal(t, test.resString, string(res), test.test)
 		cleanup()
@@ -1227,11 +1227,11 @@ func TestMongoDBGetNextUsesInprocessedImmedeatly(t *testing.T) {
 	defer cleanup()
 	err := db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
-	res1, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res1, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
-	res2, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res2, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
 
 	assert.Nil(t, err)
@@ -1247,11 +1247,11 @@ func TestMongoDBGetNextUsesInprocessedNumRetry(t *testing.T) {
 	db.Connect(dbaddress)
 	defer cleanup()
 	err := db.insertRecord(dbname, collection, &rec1)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
-	res1, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res1, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
-	_, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
 
 	assert.Nil(t, err)
@@ -1270,12 +1270,12 @@ func TestMongoDBGetNextUsesInprocessedAfterTimeout(t *testing.T) {
 	defer cleanup()
 	err := db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 1000, 3)})
-	res1, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res1, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 1000, 3)})
 	time.Sleep(time.Second * 3)
-	res2, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res2, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 1000, 3)})
 	assert.Nil(t, err)
 	assert.Nil(t, err1)
@@ -1292,12 +1292,12 @@ func TestMongoDBGetNextReturnsToNormalAfterUsesInprocessed(t *testing.T) {
 	err := db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
 	db.insertRecord(dbname, collection, &rec_finished3)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 1000, 3)})
 	time.Sleep(time.Second)
-	res1, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res1, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 1000, 3)})
-	res2, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res2, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 1000, 3)})
 	assert.Nil(t, err)
 	assert.Nil(t, err1)
@@ -1313,9 +1313,9 @@ func TestMongoDBGetNextUsesInprocessedImmedeatlyIfFinishedStream(t *testing.T) {
 	defer cleanup()
 	err := db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec_finished)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 3)})
-	res1, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res1, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 3)})
 	assert.Nil(t, err)
 	assert.Nil(t, err1)
@@ -1329,11 +1329,11 @@ func TestMongoDBGetNextUsesInprocessedImmedeatlyIfEndofStream(t *testing.T) {
 	defer cleanup()
 	err := db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 3)})
-	res1, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res1, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 3)})
-	res2, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	res2, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 3)})
 	assert.Nil(t, err)
 	assert.Nil(t, err1)
@@ -1354,7 +1354,7 @@ func TestMongoDBAckDeletesInprocessed(t *testing.T) {
 
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "ackmessage", ExtraParam: query_str})
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection,
 		GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 3)})
 	assert.NotNil(t, err)
 	if err != nil {
@@ -1370,7 +1370,7 @@ func TestMongoDBAckTwiceErrors(t *testing.T) {
 	db.insertRecord(dbname, collection, &rec1)
 	query_str := "{\"Id\":1,\"Op\":\"ackmessage\"}"
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "ackmessage", ExtraParam: query_str})
-	_, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "ackmessage", ExtraParam: query_str})
+	_, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "ackmessage", ExtraParam: query_str})
 	assert.Equal(t, utils.StatusWrongInput, err.(*DBError).Code)
 }
 
@@ -1392,10 +1392,10 @@ func TestMongoDBNegAck(t *testing.T) {
 	bparam, _ := json.Marshal(&inputParams)
 
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "negackmessage", ExtraParam: string(bparam)})
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)}) // first time message from negack
-	_, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})  // second time nothing
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)}) // first time message from negack
+	_, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})  // second time nothing
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "negackmessage", ExtraParam: string(bparam)})
-	_, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)}) // second time nothing
+	_, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)}) // second time nothing
 
 	assert.Nil(t, err)
 	assert.Equal(t, string(rec1_expect), string(res))
@@ -1414,12 +1414,12 @@ func TestMongoDBGetNextClearsInprocessAfterReset(t *testing.T) {
 	defer cleanup()
 	err := db.insertRecord(dbname, collection, &rec1)
 	db.insertRecord(dbname, collection, &rec2)
-	res, err := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
-	res1, err1 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
+	res, err, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
+	res1, err1, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
 
 	db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "resetcounter", ExtraParam: "0"})
-	res2, err2 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
-	res3, err3 := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
+	res2, err2, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
+	res3, err3, _ := db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: collection, GroupId: groupId, Op: "next", ExtraParam: getExtraParamNext("_id", true, 0, 1)})
 
 	assert.Nil(t, err)
 	assert.Nil(t, err1)
@@ -1451,9 +1451,9 @@ func TestDeleteStreams(t *testing.T) {
 		db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: test.stream, GroupId: "123", Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 		query_str := "{\"Id\":1,\"Op\":\"ackmessage\"}"
 		request := Request{Beamtime: beamtime, DataSource: datasource, Stream: test.stream, GroupId: groupId, Op: "ackmessage", ExtraParam: query_str}
-		_, err := db.ProcessRequest(request)
+		_, err, _ := db.ProcessRequest(request)
 		assert.Nil(t, err, test.message)
-		_, err = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: test.stream, GroupId: "", Op: "delete_stream", ExtraParam: test.params})
+		_, err, _ = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: test.stream, GroupId: "", Op: "delete_stream", ExtraParam: test.params})
 		if test.ok {
 			rec, err := streams.getStreams(&db, Request{Beamtime: beamtime, DataSource: datasource, ExtraParam: ""})
 			acks_exist, _ := db.collectionExist(Request{Beamtime: beamtime, DataSource: datasource, ExtraParam: ""}, acks_collection_name_prefix+test.stream)
@@ -1465,7 +1465,7 @@ func TestDeleteStreams(t *testing.T) {
 		} else {
 			assert.NotNil(t, err, test.message)
 		}
-		_, err = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: test.stream, GroupId: "", Op: "delete_stream", ExtraParam: test.params})
+		_, err, _ = db.ProcessRequest(Request{Beamtime: beamtime, DataSource: datasource, Stream: test.stream, GroupId: "", Op: "delete_stream", ExtraParam: test.params})
 		if test.ok2 {
 			assert.Nil(t, err, test.message+" 2")
 		} else {
@@ -1495,7 +1495,7 @@ func TestMongoDBEncodingOK(t *testing.T) {
 	for _, test := range testsEncodings {
 		db.Connect(dbaddress)
 		db.insertRecord(test.dbname_indb, test.collection_indb, &rec1)
-		res, err := db.ProcessRequest(Request{Beamtime: test.beamtime, DataSource: test.datasource, Stream: test.collection,
+		res, err, _ := db.ProcessRequest(Request{Beamtime: test.beamtime, DataSource: test.datasource, Stream: test.collection,
 			GroupId: test.group, Op: "next", ExtraParam: getExtraParamNext("_id", false, 0, -1)})
 		if test.ok {
 			assert.Nil(t, err, test.message)
diff --git a/broker/src/asapo_broker/server/monitoring.go b/broker/src/asapo_broker/server/monitoring.go
index 936450507b5fb6ebb32d0a4df8b83a0a79121742..d505addcfdee0d5453bb93b1a4d195eef0f3d79c 100644
--- a/broker/src/asapo_broker/server/monitoring.go
+++ b/broker/src/asapo_broker/server/monitoring.go
@@ -43,6 +43,7 @@ func (m *brokerMonitoring) getBrokerToConsumerTransfer(consumerInstanceId string
 		FileCount:          0,
 		TotalFileSize:      0,
 		DelayMs:            0,
+		Idx:                0,
 	}
 
 	// Need to insert element
@@ -75,14 +76,15 @@ func (m *brokerMonitoring) sendNow() error {
 
 func (m *brokerMonitoring) SendBrokerRequest(
 	consumerInstanceId string, pipelineStepId string,
-	op string, beamtimeId string, datasource string, stream string, groupId string, size uint64, delayMs uint64) {
+	op string, beamtimeId string, datasource string, stream string, groupId string, size uint64, delayMs uint64, idx uint64) {
 
 	m.toBeSendMutex.Lock()
 
 	group := m.getBrokerToConsumerTransfer(consumerInstanceId, pipelineStepId, op, beamtimeId, datasource, stream, groupId)
 	group.FileCount++
 	group.TotalFileSize += size
-	if group.DelayMs == 0 || group.DelayMs > delayMs {
+	if group.Idx == 0 || group.Idx < idx {
+		group.Idx = idx
 		group.DelayMs = delayMs
 	}
 
diff --git a/broker/src/asapo_broker/server/monitoring_test.go b/broker/src/asapo_broker/server/monitoring_test.go
index 03f2ca442f693b57d417ece5f289afe474edbdca..1aecd8bc8abe21097db557fe27f2c998f10509b5 100644
--- a/broker/src/asapo_broker/server/monitoring_test.go
+++ b/broker/src/asapo_broker/server/monitoring_test.go
@@ -44,7 +44,7 @@ func TestMonitoringCycle(t *testing.T) {
 	// Send one file
 	monitoring.SendBrokerRequest(
 		"consumerId", "pipelineStep", "push", "beamtime", "datasource", "stream", "groupId",
-		123, 456)
+		123, 456, 0)
 
 	monitoring.sendNow()
 
@@ -73,13 +73,13 @@ func TestMonitoringCycle(t *testing.T) {
 	// Send 3 files in 2 groups
 	monitoring.SendBrokerRequest(
 		"consumerId", "pipelineStep", "push", "beamtime1", "datasource", "stream", "groupId",
-		564, 123)
+		564, 123, 0)
 	monitoring.SendBrokerRequest(
 		"consumerId", "pipelineStep", "push", "beamtime1", "datasource", "stream", "groupId",
-		32, 45)
+		32, 45, 0)
 	monitoring.SendBrokerRequest(
 		"consumerId", "pipelineStep", "push", "beamtime2", "datasource", "stream", "groupId",
-		401, 546)
+		401, 546, 0)
 
 	monitoring.sendNow()
 
@@ -116,7 +116,7 @@ func TestSendNowErrorForwarding(t *testing.T) {
 	// Send one file
 	monitoring.SendBrokerRequest(
 		"consumerId", "pipelineStep", "push", "beamtime", "datasource", "stream", "groupId",
-		123, 234)
+		123, 234, 0)
 
 	assert.Equal(t, monitoring.sendNow().Error(), "MyMockError from Send")
 }
diff --git a/broker/src/asapo_broker/server/process_request.go b/broker/src/asapo_broker/server/process_request.go
index d657344106fcd73b71620f371715ece799f41d01..f94771876eeb106665017a0ff02dc8401ebae94f 100644
--- a/broker/src/asapo_broker/server/process_request.go
+++ b/broker/src/asapo_broker/server/process_request.go
@@ -97,7 +97,7 @@ func processRequest(w http.ResponseWriter, r *http.Request, op string, extra_par
 
 	rlog := request.Logger()
 	rlog.Debug("got request")
-	answer, code := processRequestInDb(request, rlog)
+	answer, code, idx := processRequestInDb(request, rlog)
 	w.WriteHeader(code)
 	_, err := w.Write(answer)
 
@@ -127,20 +127,21 @@ func processRequest(w http.ResponseWriter, r *http.Request, op string, extra_par
 					group_id,
 					ansStats.Size,
 					delay,
+					idx,
 				)
 			}
 		}
 	}
 }
 
-func returnError(err error, rlog logger.Logger) (answer []byte, code int) {
+func returnError(err error, rlog logger.Logger) (answer []byte, code int, idx uint64) {
 	code = database.GetStatusCodeFromError(err)
 	if code != utils.StatusNoData && code != utils.StatusPartialData {
 		rlog.WithFields(map[string]interface{}{"cause": err.Error()}).Error("cannot process request")
 	} else {
 		rlog.WithFields(map[string]interface{}{"cause": err.Error()}).Debug("no data or partial data")
 	}
-	return []byte(err.Error()), code
+	return []byte(err.Error()), code, 0
 }
 
 func reconnectIfNeeded(db_error error) {
@@ -156,12 +157,12 @@ func reconnectIfNeeded(db_error error) {
 	}
 }
 
-func processRequestInDb(request database.Request, rlog logger.Logger) (answer []byte, code int) {
+func processRequestInDb(request database.Request, rlog logger.Logger) (answer []byte, code int, idx uint64) {
 	statistics.IncreaseCounter()
-	answer, err := db.ProcessRequest(request)
+	answer, err, idx := db.ProcessRequest(request)
 	if err != nil {
 		go reconnectIfNeeded(err)
 		return returnError(err, rlog)
 	}
-	return answer, utils.StatusOK
+	return answer, utils.StatusOK, idx
 }
diff --git a/common/go/src/asapo_common/generated_proto/AsapoMonitoringCommonService.pb.go b/common/go/src/asapo_common/generated_proto/AsapoMonitoringCommonService.pb.go
index 676fcbbbb432790879f8ea3041a047446c44f75f..907976d9e02070c0a327be1e791c670296fdbbac 100644
--- a/common/go/src/asapo_common/generated_proto/AsapoMonitoringCommonService.pb.go
+++ b/common/go/src/asapo_common/generated_proto/AsapoMonitoringCommonService.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0-devel
-// 	protoc        v3.12.4
+// 	protoc-gen-go v1.25.0-devel
+// 	protoc        v3.14.0
 // source: AsapoMonitoringCommonService.proto
 
 package generated_proto
diff --git a/common/go/src/asapo_common/generated_proto/AsapoMonitoringIngestService.pb.go b/common/go/src/asapo_common/generated_proto/AsapoMonitoringIngestService.pb.go
index 57dd0daa844e5e52b15b68272baabc52241dfbfb..112dac9532ed108d3071d42cf222d504a2d6efe9 100644
--- a/common/go/src/asapo_common/generated_proto/AsapoMonitoringIngestService.pb.go
+++ b/common/go/src/asapo_common/generated_proto/AsapoMonitoringIngestService.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0-devel
-// 	protoc        v3.12.4
+// 	protoc-gen-go v1.25.0-devel
+// 	protoc        v3.14.0
 // source: AsapoMonitoringIngestService.proto
 
 package generated_proto
@@ -154,6 +154,7 @@ type BrokerRequestDataPoint struct {
 	FileCount          uint64 `protobuf:"varint,8,opt,name=fileCount,proto3" json:"fileCount,omitempty"`
 	TotalFileSize      uint64 `protobuf:"varint,9,opt,name=totalFileSize,proto3" json:"totalFileSize,omitempty"`
 	DelayMs            uint64 `protobuf:"varint,10,opt,name=delayMs,proto3" json:"delayMs,omitempty"`
+	Idx                uint64 `protobuf:"varint,11,opt,name=idx,proto3" json:"idx,omitempty"`
 }
 
 func (x *BrokerRequestDataPoint) Reset() {
@@ -258,6 +259,13 @@ func (x *BrokerRequestDataPoint) GetDelayMs() uint64 {
 	return 0
 }
 
+func (x *BrokerRequestDataPoint) GetIdx() uint64 {
+	if x != nil {
+		return x.Idx
+	}
+	return 0
+}
+
 type RdsMemoryDataPoint struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -795,7 +803,7 @@ var file_AsapoMonitoringIngestService_proto_rawDesc = []byte{
 	0x6c, 0x44, 0x62, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65,
 	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x19, 0x74, 0x6f, 0x74,
 	0x61, 0x6c, 0x44, 0x62, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
-	0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x16, 0x42, 0x72, 0x6f, 0x6b, 0x65,
+	0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xe0, 0x02, 0x0a, 0x16, 0x42, 0x72, 0x6f, 0x6b, 0x65,
 	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e,
 	0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65,
 	0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c,
@@ -816,119 +824,120 @@ var file_AsapoMonitoringIngestService_proto_rawDesc = []byte{
 	0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d,
 	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a,
 	0x07, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07,
-	0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x12, 0x52, 0x64, 0x73, 0x4d,
-	0x65, 0x6d, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1a,
-	0x0a, 0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f,
-	0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73,
-	0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75,
-	0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61,
-	0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f,
-	0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe0, 0x02, 0x0a, 0x16, 0x52, 0x64, 0x73,
-	0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f,
-	0x69, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53,
-	0x74, 0x65, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x69, 0x70,
-	0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x63,
-	0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49,
-	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65,
-	0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x62,
-	0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62,
-	0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
-	0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x74, 0x73, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x69, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d,
-	0x69, 0x73, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x69, 0x73,
-	0x73, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65,
-	0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61,
-	0x6c, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x23, 0x74, 0x6f, 0x74,
-	0x61, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69,
-	0x6d, 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73,
-	0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x23, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x61,
-	0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x4d,
-	0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xd2, 0x02, 0x0a, 0x16,
-	0x46, 0x64, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x44, 0x61, 0x74,
-	0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69,
-	0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
-	0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12, 0x2e,
-	0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e,
-	0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x73,
-	0x75, 0x6d, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a,
-	0x0a, 0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f,
-	0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69,
-	0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x66,
-	0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61,
-	0x6c, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52,
-	0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x50,
-	0x0a, 0x23, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53,
-	0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65,
-	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x23, 0x74, 0x6f, 0x74,
-	0x61, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69,
-	0x6d, 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73,
-	0x22, 0xce, 0x02, 0x0a, 0x1a, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74,
-	0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12,
-	0x22, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e,
-	0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
-	0x4d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
-	0x61, 0x6d, 0x70, 0x4d, 0x73, 0x12, 0x56, 0x0a, 0x13, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64,
-	0x50, 0x32, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x24, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x54, 0x6f, 0x52,
-	0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x44,
-	0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x13, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65,
-	0x64, 0x50, 0x32, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a,
-	0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x52, 0x64, 0x73, 0x32, 0x63, 0x54, 0x72, 0x61,
-	0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x52,
-	0x64, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
-	0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x52, 0x64,
-	0x73, 0x32, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x12, 0x43, 0x0a, 0x12,
-	0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x74, 0x61,
-	0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, 0x64, 0x73, 0x4d, 0x65,
-	0x6d, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x12, 0x67,
-	0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74,
-	0x73, 0x22, 0xab, 0x01, 0x0a, 0x18, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
-	0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x1e,
-	0x0a, 0x0a, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20,
-	0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73,
-	0x12, 0x4d, 0x0a, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x42, 0x72, 0x6f, 0x6b, 0x65,
-	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x17, 0x2e, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44,
-	0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65,
-	0x64, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22,
-	0xa8, 0x01, 0x0a, 0x1f, 0x46, 0x74, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65,
-	0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69,
-	0x6e, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a,
-	0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x04, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x12,
-	0x49, 0x0a, 0x13, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x46, 0x64, 0x73, 0x54, 0x72, 0x61,
-	0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x46,
+	0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x78, 0x18, 0x0b,
+	0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x69, 0x64, 0x78, 0x22, 0x9e, 0x01, 0x0a, 0x12, 0x52, 0x64,
+	0x73, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74,
+	0x12, 0x1a, 0x0a, 0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09,
+	0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52,
+	0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f,
+	0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a,
+	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe0, 0x02, 0x0a, 0x16, 0x52,
 	0x64, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
-	0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x13, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x46, 0x64,
-	0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x32, 0xe3, 0x01, 0x0a, 0x1c, 0x41,
-	0x73, 0x61, 0x70, 0x6f, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e,
-	0x67, 0x65, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x18, 0x49,
-	0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74,
-	0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76,
-	0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61,
-	0x69, 0x6e, 0x65, 0x72, 0x1a, 0x06, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3d,
-	0x0a, 0x16, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x44, 0x61,
-	0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x42, 0x72, 0x6f, 0x6b, 0x65,
-	0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69,
-	0x6e, 0x65, 0x72, 0x1a, 0x06, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a,
-	0x13, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x46, 0x74, 0x73, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f,
-	0x69, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x46, 0x74, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73,
-	0x75, 0x6d, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e,
+	0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e,
+	0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70,
+	0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x12, 0x2e, 0x0a,
+	0x12, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63,
+	0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x75,
+	0x6d, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a,
+	0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63,
+	0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x74,
+	0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x68, 0x69, 0x74, 0x73, 0x12, 0x16, 0x0a,
+	0x06, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d,
+	0x69, 0x73, 0x73, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69,
+	0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f,
+	0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x23, 0x74,
+	0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64,
+	0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e,
+	0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x23, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54,
+	0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x49,
+	0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0xd2, 0x02,
+	0x0a, 0x16, 0x46, 0x64, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x44,
+	0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x70, 0x65,
+	0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x49, 0x64,
+	0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74,
+	0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f,
+	0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64,
+	0x12, 0x1a, 0x0a, 0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09,
+	0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52,
+	0x09, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x6f,
+	0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
+	0x04, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65,
+	0x12, 0x50, 0x0a, 0x23, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65,
+	0x72, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f,
+	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x23, 0x74,
+	0x6f, 0x74, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64,
+	0x54, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x65, 0x63, 0x6f, 0x6e,
+	0x64, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x1a, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x44,
+	0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65,
+	0x72, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
+	0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+	0x6d, 0x70, 0x4d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x12, 0x56, 0x0a, 0x13, 0x67, 0x72, 0x6f, 0x75, 0x70,
+	0x65, 0x64, 0x50, 0x32, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x18, 0x03,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x54,
+	0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65,
+	0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x13, 0x67, 0x72, 0x6f, 0x75,
+	0x70, 0x65, 0x64, 0x50, 0x32, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x12,
+	0x4d, 0x0a, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x52, 0x64, 0x73, 0x32, 0x63, 0x54,
+	0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17,
+	0x2e, 0x52, 0x64, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x44, 0x61,
+	0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64,
+	0x52, 0x64, 0x73, 0x32, 0x63, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x12, 0x43,
+	0x0a, 0x12, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53,
+	0x74, 0x61, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, 0x64, 0x73,
+	0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52,
+	0x12, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x74,
+	0x61, 0x74, 0x73, 0x22, 0xab, 0x01, 0x0a, 0x18, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x44, 0x61,
+	0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
+	0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x20, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+	0x4d, 0x73, 0x12, 0x4d, 0x0a, 0x15, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x42, 0x72, 0x6f,
+	0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x17, 0x2e, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x15, 0x67, 0x72, 0x6f, 0x75,
+	0x70, 0x65, 0x64, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x73, 0x22, 0xa8, 0x01, 0x0a, 0x1f, 0x46, 0x74, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75,
+	0x6d, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74,
+	0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x74, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x20, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d,
+	0x73, 0x12, 0x49, 0x0a, 0x13, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x46, 0x64, 0x73, 0x54,
+	0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17,
+	0x2e, 0x46, 0x64, 0x73, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x44, 0x61,
+	0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x13, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64,
+	0x46, 0x64, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x32, 0xe3, 0x01, 0x0a,
+	0x1c, 0x41, 0x73, 0x61, 0x70, 0x6f, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67,
+	0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a,
+	0x18, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x44,
+	0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x52, 0x65, 0x63, 0x65,
+	0x69, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e,
 	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x1a, 0x06, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00,
-	0x42, 0x13, 0x5a, 0x11, 0x2e, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x12, 0x3d, 0x0a, 0x16, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72,
+	0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x42, 0x72, 0x6f,
+	0x6b, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74,
+	0x61, 0x69, 0x6e, 0x65, 0x72, 0x1a, 0x06, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12,
+	0x41, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x46, 0x74, 0x73, 0x44, 0x61, 0x74, 0x61,
+	0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x46, 0x74, 0x73, 0x54, 0x6f, 0x43, 0x6f,
+	0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x43,
+	0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x1a, 0x06, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
+	0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x2e, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,
+	0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/common/go/src/asapo_common/generated_proto/AsapoMonitoringIngestService_grpc.pb.go b/common/go/src/asapo_common/generated_proto/AsapoMonitoringIngestService_grpc.pb.go
index 284fe6f9ba0087b91bb1e4f6fbb740222eed28f9..1176122762f618cec5eed92d1a57fa68f4d693fd 100644
--- a/common/go/src/asapo_common/generated_proto/AsapoMonitoringIngestService_grpc.pb.go
+++ b/common/go/src/asapo_common/generated_proto/AsapoMonitoringIngestService_grpc.pb.go
@@ -1,8 +1,4 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
-// versions:
-// - protoc-gen-go-grpc v1.3.0
-// - protoc             v3.12.4
-// source: AsapoMonitoringIngestService.proto
 
 package generated_proto
 
@@ -18,12 +14,6 @@ import (
 // Requires gRPC-Go v1.32.0 or later.
 const _ = grpc.SupportPackageIsVersion7
 
-const (
-	AsapoMonitoringIngestService_InsertReceiverDataPoints_FullMethodName = "/AsapoMonitoringIngestService/InsertReceiverDataPoints"
-	AsapoMonitoringIngestService_InsertBrokerDataPoints_FullMethodName   = "/AsapoMonitoringIngestService/InsertBrokerDataPoints"
-	AsapoMonitoringIngestService_InsertFtsDataPoints_FullMethodName      = "/AsapoMonitoringIngestService/InsertFtsDataPoints"
-)
-
 // AsapoMonitoringIngestServiceClient is the client API for AsapoMonitoringIngestService service.
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
@@ -43,7 +33,7 @@ func NewAsapoMonitoringIngestServiceClient(cc grpc.ClientConnInterface) AsapoMon
 
 func (c *asapoMonitoringIngestServiceClient) InsertReceiverDataPoints(ctx context.Context, in *ReceiverDataPointContainer, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, AsapoMonitoringIngestService_InsertReceiverDataPoints_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/AsapoMonitoringIngestService/InsertReceiverDataPoints", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -52,7 +42,7 @@ func (c *asapoMonitoringIngestServiceClient) InsertReceiverDataPoints(ctx contex
 
 func (c *asapoMonitoringIngestServiceClient) InsertBrokerDataPoints(ctx context.Context, in *BrokerDataPointContainer, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, AsapoMonitoringIngestService_InsertBrokerDataPoints_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/AsapoMonitoringIngestService/InsertBrokerDataPoints", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -61,7 +51,7 @@ func (c *asapoMonitoringIngestServiceClient) InsertBrokerDataPoints(ctx context.
 
 func (c *asapoMonitoringIngestServiceClient) InsertFtsDataPoints(ctx context.Context, in *FtsToConsumerDataPointContainer, opts ...grpc.CallOption) (*Empty, error) {
 	out := new(Empty)
-	err := c.cc.Invoke(ctx, AsapoMonitoringIngestService_InsertFtsDataPoints_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/AsapoMonitoringIngestService/InsertFtsDataPoints", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -115,7 +105,7 @@ func _AsapoMonitoringIngestService_InsertReceiverDataPoints_Handler(srv interfac
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: AsapoMonitoringIngestService_InsertReceiverDataPoints_FullMethodName,
+		FullMethod: "/AsapoMonitoringIngestService/InsertReceiverDataPoints",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(AsapoMonitoringIngestServiceServer).InsertReceiverDataPoints(ctx, req.(*ReceiverDataPointContainer))
@@ -133,7 +123,7 @@ func _AsapoMonitoringIngestService_InsertBrokerDataPoints_Handler(srv interface{
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: AsapoMonitoringIngestService_InsertBrokerDataPoints_FullMethodName,
+		FullMethod: "/AsapoMonitoringIngestService/InsertBrokerDataPoints",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(AsapoMonitoringIngestServiceServer).InsertBrokerDataPoints(ctx, req.(*BrokerDataPointContainer))
@@ -151,7 +141,7 @@ func _AsapoMonitoringIngestService_InsertFtsDataPoints_Handler(srv interface{},
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: AsapoMonitoringIngestService_InsertFtsDataPoints_FullMethodName,
+		FullMethod: "/AsapoMonitoringIngestService/InsertFtsDataPoints",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(AsapoMonitoringIngestServiceServer).InsertFtsDataPoints(ctx, req.(*FtsToConsumerDataPointContainer))
diff --git a/common/go/src/asapo_common/generated_proto/AsapoMonitoringQueryService.pb.go b/common/go/src/asapo_common/generated_proto/AsapoMonitoringQueryService.pb.go
index e2bb11836af257ea9fa01e39bbc592f2cad90764..8efe17259dc9926293880c6fa6aa37298d832694 100644
--- a/common/go/src/asapo_common/generated_proto/AsapoMonitoringQueryService.pb.go
+++ b/common/go/src/asapo_common/generated_proto/AsapoMonitoringQueryService.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0-devel
-// 	protoc        v3.12.4
+// 	protoc-gen-go v1.25.0-devel
+// 	protoc        v3.14.0
 // source: AsapoMonitoringQueryService.proto
 
 package generated_proto
@@ -905,6 +905,7 @@ type GroupDelayResponseItem struct {
 	GroupId      string `protobuf:"bytes,1,opt,name=groupId,proto3" json:"groupId,omitempty"`
 	DelayMs      uint32 `protobuf:"varint,2,opt,name=delayMs,proto3" json:"delayMs,omitempty"`
 	PipelineStep string `protobuf:"bytes,3,opt,name=pipelineStep,proto3" json:"pipelineStep,omitempty"`
+	Idx          uint32 `protobuf:"varint,4,opt,name=idx,proto3" json:"idx,omitempty"`
 }
 
 func (x *GroupDelayResponseItem) Reset() {
@@ -960,6 +961,13 @@ func (x *GroupDelayResponseItem) GetPipelineStep() string {
 	return ""
 }
 
+func (x *GroupDelayResponseItem) GetIdx() uint32 {
+	if x != nil {
+		return x.Idx
+	}
+	return 0
+}
+
 type GroupDelayResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1154,42 +1162,43 @@ var file_AsapoMonitoringQueryService_proto_rawDesc = []byte{
 	0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
 	0x70, 0x12, 0x26, 0x0a, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c,
 	0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x74,
-	0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x16, 0x47, 0x72, 0x6f,
-	0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49,
-	0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x18, 0x0a,
-	0x07, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
-	0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c,
-	0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70,
-	0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x22, 0x49, 0x0a, 0x12, 0x47,
-	0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x12, 0x33, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x67, 0x72,
-	0x6f, 0x75, 0x70, 0x49, 0x64, 0x73, 0x2a, 0x5b, 0x0a, 0x1b, 0x50, 0x69, 0x70, 0x65, 0x6c, 0x69,
-	0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72,
-	0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44,
-	0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a,
-	0x09, 0x45, 0x78, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11,
-	0x4a, 0x75, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x65,
-	0x70, 0x10, 0x02, 0x32, 0xf0, 0x01, 0x0a, 0x1b, 0x41, 0x73, 0x61, 0x70, 0x6f, 0x4d, 0x6f, 0x6e,
-	0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
-	0x69, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
-	0x74, 0x61, 0x12, 0x06, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x4d, 0x65, 0x74,
-	0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
-	0x31, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x0d,
-	0x2e, 0x54, 0x6f, 0x70, 0x6c, 0x6f, 0x67, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x11, 0x2e,
-	0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x00, 0x12, 0x38, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69,
-	0x6e, 0x74, 0x73, 0x12, 0x10, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73,
-	0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x13, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e,
-	0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0d,
-	0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x10, 0x2e,
-	0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a,
-	0x13, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x2e, 0x2f, 0x67, 0x65, 0x6e, 0x65,
-	0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x82, 0x01, 0x0a, 0x16, 0x47, 0x72,
+	0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x18,
+	0x0a, 0x07, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
+	0x07, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x69, 0x70, 0x65,
+	0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
+	0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x65, 0x70, 0x12, 0x10, 0x0a, 0x03,
+	0x69, 0x64, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x78, 0x22, 0x49,
+	0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x73,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65,
+	0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52,
+	0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x73, 0x2a, 0x5b, 0x0a, 0x1b, 0x50, 0x69, 0x70,
+	0x65, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x51,
+	0x75, 0x65, 0x72, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x56, 0x41,
+	0x4c, 0x49, 0x44, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00,
+	0x12, 0x0d, 0x0a, 0x09, 0x45, 0x78, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x10, 0x01, 0x12,
+	0x15, 0x0a, 0x11, 0x4a, 0x75, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x54, 0x6f,
+	0x53, 0x74, 0x65, 0x70, 0x10, 0x02, 0x32, 0xf0, 0x01, 0x0a, 0x1b, 0x41, 0x73, 0x61, 0x70, 0x6f,
+	0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x06, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e,
+	0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x31, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67,
+	0x79, 0x12, 0x0d, 0x2e, 0x54, 0x6f, 0x70, 0x6c, 0x6f, 0x67, 0x79, 0x51, 0x75, 0x65, 0x72, 0x79,
+	0x1a, 0x11, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61,
+	0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x10, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69,
+	0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x13, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x50,
+	0x6f, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+	0x38, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79,
+	0x12, 0x10, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x51, 0x75, 0x65,
+	0x72, 0x79, 0x1a, 0x13, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x2e, 0x2f, 0x67,
+	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/common/go/src/asapo_common/generated_proto/AsapoMonitoringQueryService_grpc.pb.go b/common/go/src/asapo_common/generated_proto/AsapoMonitoringQueryService_grpc.pb.go
index 1c4fdd70318ff725953fe3ee77dc23d80e648f8c..771f8a2705f833496c2bef4be0d092597aea6f6c 100644
--- a/common/go/src/asapo_common/generated_proto/AsapoMonitoringQueryService_grpc.pb.go
+++ b/common/go/src/asapo_common/generated_proto/AsapoMonitoringQueryService_grpc.pb.go
@@ -1,8 +1,4 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
-// versions:
-// - protoc-gen-go-grpc v1.3.0
-// - protoc             v3.12.4
-// source: AsapoMonitoringQueryService.proto
 
 package generated_proto
 
@@ -18,13 +14,6 @@ import (
 // Requires gRPC-Go v1.32.0 or later.
 const _ = grpc.SupportPackageIsVersion7
 
-const (
-	AsapoMonitoringQueryService_GetMetadata_FullMethodName   = "/AsapoMonitoringQueryService/GetMetadata"
-	AsapoMonitoringQueryService_GetTopology_FullMethodName   = "/AsapoMonitoringQueryService/GetTopology"
-	AsapoMonitoringQueryService_GetDataPoints_FullMethodName = "/AsapoMonitoringQueryService/GetDataPoints"
-	AsapoMonitoringQueryService_GetGroupDelay_FullMethodName = "/AsapoMonitoringQueryService/GetGroupDelay"
-)
-
 // AsapoMonitoringQueryServiceClient is the client API for AsapoMonitoringQueryService service.
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
@@ -45,7 +34,7 @@ func NewAsapoMonitoringQueryServiceClient(cc grpc.ClientConnInterface) AsapoMoni
 
 func (c *asapoMonitoringQueryServiceClient) GetMetadata(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*MetadataResponse, error) {
 	out := new(MetadataResponse)
-	err := c.cc.Invoke(ctx, AsapoMonitoringQueryService_GetMetadata_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/AsapoMonitoringQueryService/GetMetadata", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -54,7 +43,7 @@ func (c *asapoMonitoringQueryServiceClient) GetMetadata(ctx context.Context, in
 
 func (c *asapoMonitoringQueryServiceClient) GetTopology(ctx context.Context, in *ToplogyQuery, opts ...grpc.CallOption) (*TopologyResponse, error) {
 	out := new(TopologyResponse)
-	err := c.cc.Invoke(ctx, AsapoMonitoringQueryService_GetTopology_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/AsapoMonitoringQueryService/GetTopology", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -63,7 +52,7 @@ func (c *asapoMonitoringQueryServiceClient) GetTopology(ctx context.Context, in
 
 func (c *asapoMonitoringQueryServiceClient) GetDataPoints(ctx context.Context, in *DataPointsQuery, opts ...grpc.CallOption) (*DataPointsResponse, error) {
 	out := new(DataPointsResponse)
-	err := c.cc.Invoke(ctx, AsapoMonitoringQueryService_GetDataPoints_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/AsapoMonitoringQueryService/GetDataPoints", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -72,7 +61,7 @@ func (c *asapoMonitoringQueryServiceClient) GetDataPoints(ctx context.Context, i
 
 func (c *asapoMonitoringQueryServiceClient) GetGroupDelay(ctx context.Context, in *GroupDelayQuery, opts ...grpc.CallOption) (*GroupDelayResponse, error) {
 	out := new(GroupDelayResponse)
-	err := c.cc.Invoke(ctx, AsapoMonitoringQueryService_GetGroupDelay_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/AsapoMonitoringQueryService/GetGroupDelay", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -130,7 +119,7 @@ func _AsapoMonitoringQueryService_GetMetadata_Handler(srv interface{}, ctx conte
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: AsapoMonitoringQueryService_GetMetadata_FullMethodName,
+		FullMethod: "/AsapoMonitoringQueryService/GetMetadata",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(AsapoMonitoringQueryServiceServer).GetMetadata(ctx, req.(*Empty))
@@ -148,7 +137,7 @@ func _AsapoMonitoringQueryService_GetTopology_Handler(srv interface{}, ctx conte
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: AsapoMonitoringQueryService_GetTopology_FullMethodName,
+		FullMethod: "/AsapoMonitoringQueryService/GetTopology",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(AsapoMonitoringQueryServiceServer).GetTopology(ctx, req.(*ToplogyQuery))
@@ -166,7 +155,7 @@ func _AsapoMonitoringQueryService_GetDataPoints_Handler(srv interface{}, ctx con
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: AsapoMonitoringQueryService_GetDataPoints_FullMethodName,
+		FullMethod: "/AsapoMonitoringQueryService/GetDataPoints",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(AsapoMonitoringQueryServiceServer).GetDataPoints(ctx, req.(*DataPointsQuery))
@@ -184,7 +173,7 @@ func _AsapoMonitoringQueryService_GetGroupDelay_Handler(srv interface{}, ctx con
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: AsapoMonitoringQueryService_GetGroupDelay_FullMethodName,
+		FullMethod: "/AsapoMonitoringQueryService/GetGroupDelay",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(AsapoMonitoringQueryServiceServer).GetGroupDelay(ctx, req.(*GroupDelayQuery))
diff --git a/common/networking/monitoring/AsapoMonitoringIngestService.proto b/common/networking/monitoring/AsapoMonitoringIngestService.proto
index a19e026972ddbbeb9841f2cf2c9d9a01a7a52238..9947f2abda515cc0c279fd8a371334c3b4ff4b7c 100644
--- a/common/networking/monitoring/AsapoMonitoringIngestService.proto
+++ b/common/networking/monitoring/AsapoMonitoringIngestService.proto
@@ -38,6 +38,7 @@ message BrokerRequestDataPoint { // send by broker
 
     uint64 totalFileSize = 9;
     uint64 delayMs = 10;
+    uint64 idx = 11;
 }
 
 message RdsMemoryDataPoint { // Send by RDS in fixed interval
diff --git a/common/networking/monitoring/AsapoMonitoringQueryService.proto b/common/networking/monitoring/AsapoMonitoringQueryService.proto
index 805d0a2bac148e380e6eadef107e43ebd6d8b917..0a9bfbe0b4bd585cae879fe253b568840e02162c 100644
--- a/common/networking/monitoring/AsapoMonitoringQueryService.proto
+++ b/common/networking/monitoring/AsapoMonitoringQueryService.proto
@@ -117,6 +117,7 @@ message GroupDelayResponseItem {
     string groupId = 1;
     uint32 delayMs = 2;
     string pipelineStep = 3;
+    uint32 idx = 4;
 }
     
 message GroupDelayResponse {
diff --git a/monitoring/monitoring_server/src/asapo_monitoring_server/server/IngestServer.go b/monitoring/monitoring_server/src/asapo_monitoring_server/server/IngestServer.go
index 49374fc621b516e6551897d2ec88f00db0143bcf..e9b70b713fde842ee99ff5ed82de08ada71d2142 100644
--- a/monitoring/monitoring_server/src/asapo_monitoring_server/server/IngestServer.go
+++ b/monitoring/monitoring_server/src/asapo_monitoring_server/server/IngestServer.go
@@ -131,6 +131,7 @@ func (s *IngestServer) InsertBrokerDataPoints(ctx context.Context, data *pb.Brok
 				"requestedFileCount":     int64(dataPoint.FileCount),
 				"totalRequestedFileSize": int64(dataPoint.TotalFileSize),
 				"delayMs":                int64(dataPoint.DelayMs),
+				"idx":                    int64(dataPoint.Idx),
 			},
 			timestamp,
 		)
diff --git a/monitoring/monitoring_server/src/asapo_monitoring_server/server/QueryServer.go b/monitoring/monitoring_server/src/asapo_monitoring_server/server/QueryServer.go
index 7d0003f572e6682805bac8eafa85d6a1b4178179..3074d7fdc635811befd39e72b88b8b789c59971f 100644
--- a/monitoring/monitoring_server/src/asapo_monitoring_server/server/QueryServer.go
+++ b/monitoring/monitoring_server/src/asapo_monitoring_server/server/QueryServer.go
@@ -178,8 +178,8 @@ func GetRequestPeriods(fromTimestamp uint64, toTimestamp uint64, groupedInterval
 	endTime := strconv.FormatUint(toTimestamp, 10)
 
 	intervalInSec := int((toTimestamp - fromTimestamp) / maxPoints)
-	if intervalInSec < 1 {
-		intervalInSec = 1
+	if intervalInSec < 5 {
+		intervalInSec = 5
 	}
 
 	switchTime := uint64(time.Now().Unix() - switchPeriod)
@@ -782,20 +782,37 @@ func (s *QueryServer) GetGroupDelay(ctx context.Context, query *pb.GroupDelayQue
 		" |> keep(columns: [\"groupId\", \"_value\", \"pipelineStepId\"])"+
 		" |> group()",
 	)
-	if err != nil {
+
+	result_idx, err_idx := s.dbQueryApi.Query(ctx, "from(bucket: \""+s.settings.InfluxDbDatabase+"\")"+
+		" |> range(start: "+startTime+", stop: "+endTime+")"+
+		" |> filter(fn: (r) => r._measurement == \""+dbMeasurementBrokerFileRequests+"\""+" )"+
+		" |> filter(fn: (r) => r.beamtime == \""+query.BeamtimeFilter+"\" and r._field == \"idx\")"+
+		" |> group(columns: [\"groupId\", \"pipelineStepId\"])"+
+		" |> last()"+
+		" |> keep(columns: [\"groupId\", \"_value\", \"pipelineStepId\"])"+
+		" |> group()",
+	)
+
+	if err != nil || err_idx != nil {
 		return nil, err
 	}
 
 	response := pb.GroupDelayResponse{}
 	for result.Next() {
+		result_idx.Next()
 		if result.Record().Value() != nil && result.Record().Values()["pipelineStepId"] != nil {
 			groupId := result.Record().Values()["groupId"]
 			if groupId == nil {
 				groupId = ""
 			}
+			idx := result_idx.Record().Value()
+			if idx == nil {
+				idx = 0
+			}
 			item := pb.GroupDelayResponseItem{
 				GroupId:      groupId.(string),
 				DelayMs:      (uint32)(result.Record().Value().(int64)),
+				Idx:          (uint32)(idx.(int64)),
 				PipelineStep: result.Record().Values()["pipelineStepId"].(string),
 			}
 			response.GroupIds = append(response.GroupIds, &item)
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringCommonService_pb.d.ts b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringCommonService_pb.d.ts
deleted file mode 100644
index 32c56d12cc9c5a2d9a0eb1444778de226a63014d..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringCommonService_pb.d.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import * as jspb from 'google-protobuf'
-
-
-
-export class Empty extends jspb.Message {
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): Empty.AsObject;
-  static toObject(includeInstance: boolean, msg: Empty): Empty.AsObject;
-  static serializeBinaryToWriter(message: Empty, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): Empty;
-  static deserializeBinaryFromReader(message: Empty, reader: jspb.BinaryReader): Empty;
-}
-
-export namespace Empty {
-  export type AsObject = {
-  }
-}
-
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringCommonService_pb.js b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringCommonService_pb.js
deleted file mode 100644
index 39d9b1634ffb5a7fb10c7cd6d40bf33a86ffeb51..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringCommonService_pb.js
+++ /dev/null
@@ -1,141 +0,0 @@
-// source: AsapoMonitoringCommonService.proto
-/**
- * @fileoverview
- * @enhanceable
- * @suppress {missingRequire} reports error on implicit type usages.
- * @suppress {messageConventions} JS Compiler reports an error if a variable or
- *     field starts with 'MSG_' and isn't a translatable message.
- * @public
- */
-// GENERATED CODE -- DO NOT EDIT!
-/* eslint-disable */
-// @ts-nocheck
-
-var jspb = require('google-protobuf');
-var goog = jspb;
-var global = Function('return this')();
-
-goog.exportSymbol('proto.Empty', null, global);
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.Empty = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.Empty, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.Empty.displayName = 'proto.Empty';
-}
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.Empty.prototype.toObject = function(opt_includeInstance) {
-  return proto.Empty.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.Empty} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.Empty.toObject = function(includeInstance, msg) {
-  var f, obj = {
-
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.Empty}
- */
-proto.Empty.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.Empty;
-  return proto.Empty.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.Empty} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.Empty}
- */
-proto.Empty.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.Empty.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.Empty.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.Empty} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.Empty.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-};
-
-
-goog.object.extend(exports, proto);
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_grpc_web_pb.d.ts b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_grpc_web_pb.d.ts
deleted file mode 100644
index 9e389a7a050291d16839b477af8be515c7f1ce9c..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_grpc_web_pb.d.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import * as grpcWeb from 'grpc-web';
-
-import * as AsapoMonitoringCommonService_pb from './AsapoMonitoringCommonService_pb';
-import * as AsapoMonitoringIngestService_pb from './AsapoMonitoringIngestService_pb';
-
-
-export class AsapoMonitoringIngestServiceClient {
-  constructor (hostname: string,
-               credentials?: null | { [index: string]: string; },
-               options?: null | { [index: string]: any; });
-
-  insertReceiverDataPoints(
-    request: AsapoMonitoringIngestService_pb.ReceiverDataPointContainer,
-    metadata: grpcWeb.Metadata | undefined,
-    callback: (err: grpcWeb.Error,
-               response: AsapoMonitoringCommonService_pb.Empty) => void
-  ): grpcWeb.ClientReadableStream<AsapoMonitoringCommonService_pb.Empty>;
-
-  insertBrokerDataPoints(
-    request: AsapoMonitoringIngestService_pb.BrokerDataPointContainer,
-    metadata: grpcWeb.Metadata | undefined,
-    callback: (err: grpcWeb.Error,
-               response: AsapoMonitoringCommonService_pb.Empty) => void
-  ): grpcWeb.ClientReadableStream<AsapoMonitoringCommonService_pb.Empty>;
-
-  insertFtsDataPoints(
-    request: AsapoMonitoringIngestService_pb.FtsToConsumerDataPointContainer,
-    metadata: grpcWeb.Metadata | undefined,
-    callback: (err: grpcWeb.Error,
-               response: AsapoMonitoringCommonService_pb.Empty) => void
-  ): grpcWeb.ClientReadableStream<AsapoMonitoringCommonService_pb.Empty>;
-
-}
-
-export class AsapoMonitoringIngestServicePromiseClient {
-  constructor (hostname: string,
-               credentials?: null | { [index: string]: string; },
-               options?: null | { [index: string]: any; });
-
-  insertReceiverDataPoints(
-    request: AsapoMonitoringIngestService_pb.ReceiverDataPointContainer,
-    metadata?: grpcWeb.Metadata
-  ): Promise<AsapoMonitoringCommonService_pb.Empty>;
-
-  insertBrokerDataPoints(
-    request: AsapoMonitoringIngestService_pb.BrokerDataPointContainer,
-    metadata?: grpcWeb.Metadata
-  ): Promise<AsapoMonitoringCommonService_pb.Empty>;
-
-  insertFtsDataPoints(
-    request: AsapoMonitoringIngestService_pb.FtsToConsumerDataPointContainer,
-    metadata?: grpcWeb.Metadata
-  ): Promise<AsapoMonitoringCommonService_pb.Empty>;
-
-}
-
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_grpc_web_pb.js b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_grpc_web_pb.js
deleted file mode 100644
index 815265270ae714a9289678c9fba9f9f44d4fb340..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_grpc_web_pb.js
+++ /dev/null
@@ -1,315 +0,0 @@
-/**
- * @fileoverview gRPC-Web generated client stub for 
- * @enhanceable
- * @public
- */
-
-// GENERATED CODE -- DO NOT EDIT!
-
-
-/* eslint-disable */
-// @ts-nocheck
-
-
-
-const grpc = {};
-grpc.web = require('grpc-web');
-
-
-var AsapoMonitoringCommonService_pb = require('./AsapoMonitoringCommonService_pb.js')
-const proto = require('./AsapoMonitoringIngestService_pb.js');
-
-/**
- * @param {string} hostname
- * @param {?Object} credentials
- * @param {?Object} options
- * @constructor
- * @struct
- * @final
- */
-proto.AsapoMonitoringIngestServiceClient =
-    function(hostname, credentials, options) {
-  if (!options) options = {};
-  options['format'] = 'text';
-
-  /**
-   * @private @const {!grpc.web.GrpcWebClientBase} The client
-   */
-  this.client_ = new grpc.web.GrpcWebClientBase(options);
-
-  /**
-   * @private @const {string} The hostname
-   */
-  this.hostname_ = hostname;
-
-};
-
-
-/**
- * @param {string} hostname
- * @param {?Object} credentials
- * @param {?Object} options
- * @constructor
- * @struct
- * @final
- */
-proto.AsapoMonitoringIngestServicePromiseClient =
-    function(hostname, credentials, options) {
-  if (!options) options = {};
-  options['format'] = 'text';
-
-  /**
-   * @private @const {!grpc.web.GrpcWebClientBase} The client
-   */
-  this.client_ = new grpc.web.GrpcWebClientBase(options);
-
-  /**
-   * @private @const {string} The hostname
-   */
-  this.hostname_ = hostname;
-
-};
-
-
-/**
- * @const
- * @type {!grpc.web.MethodDescriptor<
- *   !proto.ReceiverDataPointContainer,
- *   !proto.Empty>}
- */
-const methodDescriptor_AsapoMonitoringIngestService_InsertReceiverDataPoints = new grpc.web.MethodDescriptor(
-  '/AsapoMonitoringIngestService/InsertReceiverDataPoints',
-  grpc.web.MethodType.UNARY,
-  proto.ReceiverDataPointContainer,
-  AsapoMonitoringCommonService_pb.Empty,
-  /**
-   * @param {!proto.ReceiverDataPointContainer} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  AsapoMonitoringCommonService_pb.Empty.deserializeBinary
-);
-
-
-/**
- * @const
- * @type {!grpc.web.AbstractClientBase.MethodInfo<
- *   !proto.ReceiverDataPointContainer,
- *   !proto.Empty>}
- */
-const methodInfo_AsapoMonitoringIngestService_InsertReceiverDataPoints = new grpc.web.AbstractClientBase.MethodInfo(
-  AsapoMonitoringCommonService_pb.Empty,
-  /**
-   * @param {!proto.ReceiverDataPointContainer} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  AsapoMonitoringCommonService_pb.Empty.deserializeBinary
-);
-
-
-/**
- * @param {!proto.ReceiverDataPointContainer} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @param {function(?grpc.web.Error, ?proto.Empty)}
- *     callback The callback function(error, response)
- * @return {!grpc.web.ClientReadableStream<!proto.Empty>|undefined}
- *     The XHR Node Readable Stream
- */
-proto.AsapoMonitoringIngestServiceClient.prototype.insertReceiverDataPoints =
-    function(request, metadata, callback) {
-  return this.client_.rpcCall(this.hostname_ +
-      '/AsapoMonitoringIngestService/InsertReceiverDataPoints',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringIngestService_InsertReceiverDataPoints,
-      callback);
-};
-
-
-/**
- * @param {!proto.ReceiverDataPointContainer} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @return {!Promise<!proto.Empty>}
- *     Promise that resolves to the response
- */
-proto.AsapoMonitoringIngestServicePromiseClient.prototype.insertReceiverDataPoints =
-    function(request, metadata) {
-  return this.client_.unaryCall(this.hostname_ +
-      '/AsapoMonitoringIngestService/InsertReceiverDataPoints',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringIngestService_InsertReceiverDataPoints);
-};
-
-
-/**
- * @const
- * @type {!grpc.web.MethodDescriptor<
- *   !proto.BrokerDataPointContainer,
- *   !proto.Empty>}
- */
-const methodDescriptor_AsapoMonitoringIngestService_InsertBrokerDataPoints = new grpc.web.MethodDescriptor(
-  '/AsapoMonitoringIngestService/InsertBrokerDataPoints',
-  grpc.web.MethodType.UNARY,
-  proto.BrokerDataPointContainer,
-  AsapoMonitoringCommonService_pb.Empty,
-  /**
-   * @param {!proto.BrokerDataPointContainer} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  AsapoMonitoringCommonService_pb.Empty.deserializeBinary
-);
-
-
-/**
- * @const
- * @type {!grpc.web.AbstractClientBase.MethodInfo<
- *   !proto.BrokerDataPointContainer,
- *   !proto.Empty>}
- */
-const methodInfo_AsapoMonitoringIngestService_InsertBrokerDataPoints = new grpc.web.AbstractClientBase.MethodInfo(
-  AsapoMonitoringCommonService_pb.Empty,
-  /**
-   * @param {!proto.BrokerDataPointContainer} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  AsapoMonitoringCommonService_pb.Empty.deserializeBinary
-);
-
-
-/**
- * @param {!proto.BrokerDataPointContainer} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @param {function(?grpc.web.Error, ?proto.Empty)}
- *     callback The callback function(error, response)
- * @return {!grpc.web.ClientReadableStream<!proto.Empty>|undefined}
- *     The XHR Node Readable Stream
- */
-proto.AsapoMonitoringIngestServiceClient.prototype.insertBrokerDataPoints =
-    function(request, metadata, callback) {
-  return this.client_.rpcCall(this.hostname_ +
-      '/AsapoMonitoringIngestService/InsertBrokerDataPoints',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringIngestService_InsertBrokerDataPoints,
-      callback);
-};
-
-
-/**
- * @param {!proto.BrokerDataPointContainer} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @return {!Promise<!proto.Empty>}
- *     Promise that resolves to the response
- */
-proto.AsapoMonitoringIngestServicePromiseClient.prototype.insertBrokerDataPoints =
-    function(request, metadata) {
-  return this.client_.unaryCall(this.hostname_ +
-      '/AsapoMonitoringIngestService/InsertBrokerDataPoints',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringIngestService_InsertBrokerDataPoints);
-};
-
-
-/**
- * @const
- * @type {!grpc.web.MethodDescriptor<
- *   !proto.FtsToConsumerDataPointContainer,
- *   !proto.Empty>}
- */
-const methodDescriptor_AsapoMonitoringIngestService_InsertFtsDataPoints = new grpc.web.MethodDescriptor(
-  '/AsapoMonitoringIngestService/InsertFtsDataPoints',
-  grpc.web.MethodType.UNARY,
-  proto.FtsToConsumerDataPointContainer,
-  AsapoMonitoringCommonService_pb.Empty,
-  /**
-   * @param {!proto.FtsToConsumerDataPointContainer} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  AsapoMonitoringCommonService_pb.Empty.deserializeBinary
-);
-
-
-/**
- * @const
- * @type {!grpc.web.AbstractClientBase.MethodInfo<
- *   !proto.FtsToConsumerDataPointContainer,
- *   !proto.Empty>}
- */
-const methodInfo_AsapoMonitoringIngestService_InsertFtsDataPoints = new grpc.web.AbstractClientBase.MethodInfo(
-  AsapoMonitoringCommonService_pb.Empty,
-  /**
-   * @param {!proto.FtsToConsumerDataPointContainer} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  AsapoMonitoringCommonService_pb.Empty.deserializeBinary
-);
-
-
-/**
- * @param {!proto.FtsToConsumerDataPointContainer} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @param {function(?grpc.web.Error, ?proto.Empty)}
- *     callback The callback function(error, response)
- * @return {!grpc.web.ClientReadableStream<!proto.Empty>|undefined}
- *     The XHR Node Readable Stream
- */
-proto.AsapoMonitoringIngestServiceClient.prototype.insertFtsDataPoints =
-    function(request, metadata, callback) {
-  return this.client_.rpcCall(this.hostname_ +
-      '/AsapoMonitoringIngestService/InsertFtsDataPoints',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringIngestService_InsertFtsDataPoints,
-      callback);
-};
-
-
-/**
- * @param {!proto.FtsToConsumerDataPointContainer} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @return {!Promise<!proto.Empty>}
- *     Promise that resolves to the response
- */
-proto.AsapoMonitoringIngestServicePromiseClient.prototype.insertFtsDataPoints =
-    function(request, metadata) {
-  return this.client_.unaryCall(this.hostname_ +
-      '/AsapoMonitoringIngestService/InsertFtsDataPoints',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringIngestService_InsertFtsDataPoints);
-};
-
-
-module.exports = proto;
-
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_pb.d.ts b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_pb.d.ts
deleted file mode 100644
index 367558e9f5d978b83347238dcb03eb2e73ab13a2..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_pb.d.ts
+++ /dev/null
@@ -1,339 +0,0 @@
-import * as jspb from 'google-protobuf'
-
-import * as AsapoMonitoringCommonService_pb from './AsapoMonitoringCommonService_pb';
-
-
-export class ProducerToReceiverTransferDataPoint extends jspb.Message {
-  getPipelinestepid(): string;
-  setPipelinestepid(value: string): ProducerToReceiverTransferDataPoint;
-
-  getProducerinstanceid(): string;
-  setProducerinstanceid(value: string): ProducerToReceiverTransferDataPoint;
-
-  getBeamtime(): string;
-  setBeamtime(value: string): ProducerToReceiverTransferDataPoint;
-
-  getSource(): string;
-  setSource(value: string): ProducerToReceiverTransferDataPoint;
-
-  getStream(): string;
-  setStream(value: string): ProducerToReceiverTransferDataPoint;
-
-  getFilecount(): number;
-  setFilecount(value: number): ProducerToReceiverTransferDataPoint;
-
-  getTotalfilesize(): number;
-  setTotalfilesize(value: number): ProducerToReceiverTransferDataPoint;
-
-  getTotaltransferreceivetimeinmicroseconds(): number;
-  setTotaltransferreceivetimeinmicroseconds(value: number): ProducerToReceiverTransferDataPoint;
-
-  getTotalwriteiotimeinmicroseconds(): number;
-  setTotalwriteiotimeinmicroseconds(value: number): ProducerToReceiverTransferDataPoint;
-
-  getTotaldbtimeinmicroseconds(): number;
-  setTotaldbtimeinmicroseconds(value: number): ProducerToReceiverTransferDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): ProducerToReceiverTransferDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: ProducerToReceiverTransferDataPoint): ProducerToReceiverTransferDataPoint.AsObject;
-  static serializeBinaryToWriter(message: ProducerToReceiverTransferDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): ProducerToReceiverTransferDataPoint;
-  static deserializeBinaryFromReader(message: ProducerToReceiverTransferDataPoint, reader: jspb.BinaryReader): ProducerToReceiverTransferDataPoint;
-}
-
-export namespace ProducerToReceiverTransferDataPoint {
-  export type AsObject = {
-    pipelinestepid: string,
-    producerinstanceid: string,
-    beamtime: string,
-    source: string,
-    stream: string,
-    filecount: number,
-    totalfilesize: number,
-    totaltransferreceivetimeinmicroseconds: number,
-    totalwriteiotimeinmicroseconds: number,
-    totaldbtimeinmicroseconds: number,
-  }
-}
-
-export class BrokerRequestDataPoint extends jspb.Message {
-  getPipelinestepid(): string;
-  setPipelinestepid(value: string): BrokerRequestDataPoint;
-
-  getConsumerinstanceid(): string;
-  setConsumerinstanceid(value: string): BrokerRequestDataPoint;
-
-  getCommand(): string;
-  setCommand(value: string): BrokerRequestDataPoint;
-
-  getBeamtime(): string;
-  setBeamtime(value: string): BrokerRequestDataPoint;
-
-  getSource(): string;
-  setSource(value: string): BrokerRequestDataPoint;
-
-  getStream(): string;
-  setStream(value: string): BrokerRequestDataPoint;
-
-  getGroupid(): string;
-  setGroupid(value: string): BrokerRequestDataPoint;
-
-  getFilecount(): number;
-  setFilecount(value: number): BrokerRequestDataPoint;
-
-  getTotalfilesize(): number;
-  setTotalfilesize(value: number): BrokerRequestDataPoint;
-
-  getDelayms(): number;
-  setDelayms(value: number): BrokerRequestDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): BrokerRequestDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: BrokerRequestDataPoint): BrokerRequestDataPoint.AsObject;
-  static serializeBinaryToWriter(message: BrokerRequestDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): BrokerRequestDataPoint;
-  static deserializeBinaryFromReader(message: BrokerRequestDataPoint, reader: jspb.BinaryReader): BrokerRequestDataPoint;
-}
-
-export namespace BrokerRequestDataPoint {
-  export type AsObject = {
-    pipelinestepid: string,
-    consumerinstanceid: string,
-    command: string,
-    beamtime: string,
-    source: string,
-    stream: string,
-    groupid: string,
-    filecount: number,
-    totalfilesize: number,
-    delayms: number,
-  }
-}
-
-export class RdsMemoryDataPoint extends jspb.Message {
-  getBeamtime(): string;
-  setBeamtime(value: string): RdsMemoryDataPoint;
-
-  getSource(): string;
-  setSource(value: string): RdsMemoryDataPoint;
-
-  getStream(): string;
-  setStream(value: string): RdsMemoryDataPoint;
-
-  getUsedbytes(): number;
-  setUsedbytes(value: number): RdsMemoryDataPoint;
-
-  getTotalbytes(): number;
-  setTotalbytes(value: number): RdsMemoryDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): RdsMemoryDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: RdsMemoryDataPoint): RdsMemoryDataPoint.AsObject;
-  static serializeBinaryToWriter(message: RdsMemoryDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): RdsMemoryDataPoint;
-  static deserializeBinaryFromReader(message: RdsMemoryDataPoint, reader: jspb.BinaryReader): RdsMemoryDataPoint;
-}
-
-export namespace RdsMemoryDataPoint {
-  export type AsObject = {
-    beamtime: string,
-    source: string,
-    stream: string,
-    usedbytes: number,
-    totalbytes: number,
-  }
-}
-
-export class RdsToConsumerDataPoint extends jspb.Message {
-  getPipelinestepid(): string;
-  setPipelinestepid(value: string): RdsToConsumerDataPoint;
-
-  getConsumerinstanceid(): string;
-  setConsumerinstanceid(value: string): RdsToConsumerDataPoint;
-
-  getBeamtime(): string;
-  setBeamtime(value: string): RdsToConsumerDataPoint;
-
-  getSource(): string;
-  setSource(value: string): RdsToConsumerDataPoint;
-
-  getStream(): string;
-  setStream(value: string): RdsToConsumerDataPoint;
-
-  getHits(): number;
-  setHits(value: number): RdsToConsumerDataPoint;
-
-  getMisses(): number;
-  setMisses(value: number): RdsToConsumerDataPoint;
-
-  getTotalfilesize(): number;
-  setTotalfilesize(value: number): RdsToConsumerDataPoint;
-
-  getTotaltransfersendtimeinmicroseconds(): number;
-  setTotaltransfersendtimeinmicroseconds(value: number): RdsToConsumerDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): RdsToConsumerDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: RdsToConsumerDataPoint): RdsToConsumerDataPoint.AsObject;
-  static serializeBinaryToWriter(message: RdsToConsumerDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): RdsToConsumerDataPoint;
-  static deserializeBinaryFromReader(message: RdsToConsumerDataPoint, reader: jspb.BinaryReader): RdsToConsumerDataPoint;
-}
-
-export namespace RdsToConsumerDataPoint {
-  export type AsObject = {
-    pipelinestepid: string,
-    consumerinstanceid: string,
-    beamtime: string,
-    source: string,
-    stream: string,
-    hits: number,
-    misses: number,
-    totalfilesize: number,
-    totaltransfersendtimeinmicroseconds: number,
-  }
-}
-
-export class FdsToConsumerDataPoint extends jspb.Message {
-  getPipelinestepid(): string;
-  setPipelinestepid(value: string): FdsToConsumerDataPoint;
-
-  getConsumerinstanceid(): string;
-  setConsumerinstanceid(value: string): FdsToConsumerDataPoint;
-
-  getBeamtime(): string;
-  setBeamtime(value: string): FdsToConsumerDataPoint;
-
-  getSource(): string;
-  setSource(value: string): FdsToConsumerDataPoint;
-
-  getStream(): string;
-  setStream(value: string): FdsToConsumerDataPoint;
-
-  getFilecount(): number;
-  setFilecount(value: number): FdsToConsumerDataPoint;
-
-  getTotalfilesize(): number;
-  setTotalfilesize(value: number): FdsToConsumerDataPoint;
-
-  getTotaltransfersendtimeinmicroseconds(): number;
-  setTotaltransfersendtimeinmicroseconds(value: number): FdsToConsumerDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): FdsToConsumerDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: FdsToConsumerDataPoint): FdsToConsumerDataPoint.AsObject;
-  static serializeBinaryToWriter(message: FdsToConsumerDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): FdsToConsumerDataPoint;
-  static deserializeBinaryFromReader(message: FdsToConsumerDataPoint, reader: jspb.BinaryReader): FdsToConsumerDataPoint;
-}
-
-export namespace FdsToConsumerDataPoint {
-  export type AsObject = {
-    pipelinestepid: string,
-    consumerinstanceid: string,
-    beamtime: string,
-    source: string,
-    stream: string,
-    filecount: number,
-    totalfilesize: number,
-    totaltransfersendtimeinmicroseconds: number,
-  }
-}
-
-export class ReceiverDataPointContainer extends jspb.Message {
-  getReceivername(): string;
-  setReceivername(value: string): ReceiverDataPointContainer;
-
-  getTimestampms(): number;
-  setTimestampms(value: number): ReceiverDataPointContainer;
-
-  getGroupedp2rtransfersList(): Array<ProducerToReceiverTransferDataPoint>;
-  setGroupedp2rtransfersList(value: Array<ProducerToReceiverTransferDataPoint>): ReceiverDataPointContainer;
-  clearGroupedp2rtransfersList(): ReceiverDataPointContainer;
-  addGroupedp2rtransfers(value?: ProducerToReceiverTransferDataPoint, index?: number): ProducerToReceiverTransferDataPoint;
-
-  getGroupedrds2ctransfersList(): Array<RdsToConsumerDataPoint>;
-  setGroupedrds2ctransfersList(value: Array<RdsToConsumerDataPoint>): ReceiverDataPointContainer;
-  clearGroupedrds2ctransfersList(): ReceiverDataPointContainer;
-  addGroupedrds2ctransfers(value?: RdsToConsumerDataPoint, index?: number): RdsToConsumerDataPoint;
-
-  getGroupedmemorystatsList(): Array<RdsMemoryDataPoint>;
-  setGroupedmemorystatsList(value: Array<RdsMemoryDataPoint>): ReceiverDataPointContainer;
-  clearGroupedmemorystatsList(): ReceiverDataPointContainer;
-  addGroupedmemorystats(value?: RdsMemoryDataPoint, index?: number): RdsMemoryDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): ReceiverDataPointContainer.AsObject;
-  static toObject(includeInstance: boolean, msg: ReceiverDataPointContainer): ReceiverDataPointContainer.AsObject;
-  static serializeBinaryToWriter(message: ReceiverDataPointContainer, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): ReceiverDataPointContainer;
-  static deserializeBinaryFromReader(message: ReceiverDataPointContainer, reader: jspb.BinaryReader): ReceiverDataPointContainer;
-}
-
-export namespace ReceiverDataPointContainer {
-  export type AsObject = {
-    receivername: string,
-    timestampms: number,
-    groupedp2rtransfersList: Array<ProducerToReceiverTransferDataPoint.AsObject>,
-    groupedrds2ctransfersList: Array<RdsToConsumerDataPoint.AsObject>,
-    groupedmemorystatsList: Array<RdsMemoryDataPoint.AsObject>,
-  }
-}
-
-export class BrokerDataPointContainer extends jspb.Message {
-  getBrokername(): string;
-  setBrokername(value: string): BrokerDataPointContainer;
-
-  getTimestampms(): number;
-  setTimestampms(value: number): BrokerDataPointContainer;
-
-  getGroupedbrokerrequestsList(): Array<BrokerRequestDataPoint>;
-  setGroupedbrokerrequestsList(value: Array<BrokerRequestDataPoint>): BrokerDataPointContainer;
-  clearGroupedbrokerrequestsList(): BrokerDataPointContainer;
-  addGroupedbrokerrequests(value?: BrokerRequestDataPoint, index?: number): BrokerRequestDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): BrokerDataPointContainer.AsObject;
-  static toObject(includeInstance: boolean, msg: BrokerDataPointContainer): BrokerDataPointContainer.AsObject;
-  static serializeBinaryToWriter(message: BrokerDataPointContainer, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): BrokerDataPointContainer;
-  static deserializeBinaryFromReader(message: BrokerDataPointContainer, reader: jspb.BinaryReader): BrokerDataPointContainer;
-}
-
-export namespace BrokerDataPointContainer {
-  export type AsObject = {
-    brokername: string,
-    timestampms: number,
-    groupedbrokerrequestsList: Array<BrokerRequestDataPoint.AsObject>,
-  }
-}
-
-export class FtsToConsumerDataPointContainer extends jspb.Message {
-  getFtsname(): string;
-  setFtsname(value: string): FtsToConsumerDataPointContainer;
-
-  getTimestampms(): number;
-  setTimestampms(value: number): FtsToConsumerDataPointContainer;
-
-  getGroupedfdstransfersList(): Array<FdsToConsumerDataPoint>;
-  setGroupedfdstransfersList(value: Array<FdsToConsumerDataPoint>): FtsToConsumerDataPointContainer;
-  clearGroupedfdstransfersList(): FtsToConsumerDataPointContainer;
-  addGroupedfdstransfers(value?: FdsToConsumerDataPoint, index?: number): FdsToConsumerDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): FtsToConsumerDataPointContainer.AsObject;
-  static toObject(includeInstance: boolean, msg: FtsToConsumerDataPointContainer): FtsToConsumerDataPointContainer.AsObject;
-  static serializeBinaryToWriter(message: FtsToConsumerDataPointContainer, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): FtsToConsumerDataPointContainer;
-  static deserializeBinaryFromReader(message: FtsToConsumerDataPointContainer, reader: jspb.BinaryReader): FtsToConsumerDataPointContainer;
-}
-
-export namespace FtsToConsumerDataPointContainer {
-  export type AsObject = {
-    ftsname: string,
-    timestampms: number,
-    groupedfdstransfersList: Array<FdsToConsumerDataPoint.AsObject>,
-  }
-}
-
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_pb.js b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_pb.js
deleted file mode 100644
index d6e2633642221957fabc9efabc551cdc304aa6f9..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringIngestService_pb.js
+++ /dev/null
@@ -1,2722 +0,0 @@
-// source: AsapoMonitoringIngestService.proto
-/**
- * @fileoverview
- * @enhanceable
- * @suppress {missingRequire} reports error on implicit type usages.
- * @suppress {messageConventions} JS Compiler reports an error if a variable or
- *     field starts with 'MSG_' and isn't a translatable message.
- * @public
- */
-// GENERATED CODE -- DO NOT EDIT!
-/* eslint-disable */
-// @ts-nocheck
-
-var jspb = require('google-protobuf');
-var goog = jspb;
-var global = Function('return this')();
-
-var AsapoMonitoringCommonService_pb = require('./AsapoMonitoringCommonService_pb.js');
-goog.object.extend(proto, AsapoMonitoringCommonService_pb);
-goog.exportSymbol('proto.BrokerDataPointContainer', null, global);
-goog.exportSymbol('proto.BrokerRequestDataPoint', null, global);
-goog.exportSymbol('proto.FdsToConsumerDataPoint', null, global);
-goog.exportSymbol('proto.FtsToConsumerDataPointContainer', null, global);
-goog.exportSymbol('proto.ProducerToReceiverTransferDataPoint', null, global);
-goog.exportSymbol('proto.RdsMemoryDataPoint', null, global);
-goog.exportSymbol('proto.RdsToConsumerDataPoint', null, global);
-goog.exportSymbol('proto.ReceiverDataPointContainer', null, global);
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.ProducerToReceiverTransferDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.ProducerToReceiverTransferDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.ProducerToReceiverTransferDataPoint.displayName = 'proto.ProducerToReceiverTransferDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.BrokerRequestDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.BrokerRequestDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.BrokerRequestDataPoint.displayName = 'proto.BrokerRequestDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.RdsMemoryDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.RdsMemoryDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.RdsMemoryDataPoint.displayName = 'proto.RdsMemoryDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.RdsToConsumerDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.RdsToConsumerDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.RdsToConsumerDataPoint.displayName = 'proto.RdsToConsumerDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.FdsToConsumerDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.FdsToConsumerDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.FdsToConsumerDataPoint.displayName = 'proto.FdsToConsumerDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.ReceiverDataPointContainer = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.ReceiverDataPointContainer.repeatedFields_, null);
-};
-goog.inherits(proto.ReceiverDataPointContainer, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.ReceiverDataPointContainer.displayName = 'proto.ReceiverDataPointContainer';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.BrokerDataPointContainer = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.BrokerDataPointContainer.repeatedFields_, null);
-};
-goog.inherits(proto.BrokerDataPointContainer, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.BrokerDataPointContainer.displayName = 'proto.BrokerDataPointContainer';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.FtsToConsumerDataPointContainer = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.FtsToConsumerDataPointContainer.repeatedFields_, null);
-};
-goog.inherits(proto.FtsToConsumerDataPointContainer, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.FtsToConsumerDataPointContainer.displayName = 'proto.FtsToConsumerDataPointContainer';
-}
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.ProducerToReceiverTransferDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.ProducerToReceiverTransferDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.ProducerToReceiverTransferDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    pipelinestepid: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    producerinstanceid: jspb.Message.getFieldWithDefault(msg, 2, ""),
-    beamtime: jspb.Message.getFieldWithDefault(msg, 3, ""),
-    source: jspb.Message.getFieldWithDefault(msg, 4, ""),
-    stream: jspb.Message.getFieldWithDefault(msg, 5, ""),
-    filecount: jspb.Message.getFieldWithDefault(msg, 6, 0),
-    totalfilesize: jspb.Message.getFieldWithDefault(msg, 7, 0),
-    totaltransferreceivetimeinmicroseconds: jspb.Message.getFieldWithDefault(msg, 8, 0),
-    totalwriteiotimeinmicroseconds: jspb.Message.getFieldWithDefault(msg, 9, 0),
-    totaldbtimeinmicroseconds: jspb.Message.getFieldWithDefault(msg, 10, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.ProducerToReceiverTransferDataPoint}
- */
-proto.ProducerToReceiverTransferDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.ProducerToReceiverTransferDataPoint;
-  return proto.ProducerToReceiverTransferDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.ProducerToReceiverTransferDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.ProducerToReceiverTransferDataPoint}
- */
-proto.ProducerToReceiverTransferDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setPipelinestepid(value);
-      break;
-    case 2:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setProducerinstanceid(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBeamtime(value);
-      break;
-    case 4:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setSource(value);
-      break;
-    case 5:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setStream(value);
-      break;
-    case 6:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setFilecount(value);
-      break;
-    case 7:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalfilesize(value);
-      break;
-    case 8:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotaltransferreceivetimeinmicroseconds(value);
-      break;
-    case 9:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalwriteiotimeinmicroseconds(value);
-      break;
-    case 10:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotaldbtimeinmicroseconds(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.ProducerToReceiverTransferDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.ProducerToReceiverTransferDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.ProducerToReceiverTransferDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getPipelinestepid();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getProducerinstanceid();
-  if (f.length > 0) {
-    writer.writeString(
-      2,
-      f
-    );
-  }
-  f = message.getBeamtime();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-  f = message.getSource();
-  if (f.length > 0) {
-    writer.writeString(
-      4,
-      f
-    );
-  }
-  f = message.getStream();
-  if (f.length > 0) {
-    writer.writeString(
-      5,
-      f
-    );
-  }
-  f = message.getFilecount();
-  if (f !== 0) {
-    writer.writeUint64(
-      6,
-      f
-    );
-  }
-  f = message.getTotalfilesize();
-  if (f !== 0) {
-    writer.writeUint64(
-      7,
-      f
-    );
-  }
-  f = message.getTotaltransferreceivetimeinmicroseconds();
-  if (f !== 0) {
-    writer.writeUint64(
-      8,
-      f
-    );
-  }
-  f = message.getTotalwriteiotimeinmicroseconds();
-  if (f !== 0) {
-    writer.writeUint64(
-      9,
-      f
-    );
-  }
-  f = message.getTotaldbtimeinmicroseconds();
-  if (f !== 0) {
-    writer.writeUint64(
-      10,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string pipelineStepId = 1;
- * @return {string}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getPipelinestepid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setPipelinestepid = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional string producerInstanceId = 2;
- * @return {string}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getProducerinstanceid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setProducerinstanceid = function(value) {
-  return jspb.Message.setProto3StringField(this, 2, value);
-};
-
-
-/**
- * optional string beamtime = 3;
- * @return {string}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getBeamtime = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setBeamtime = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-/**
- * optional string source = 4;
- * @return {string}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getSource = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setSource = function(value) {
-  return jspb.Message.setProto3StringField(this, 4, value);
-};
-
-
-/**
- * optional string stream = 5;
- * @return {string}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getStream = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setStream = function(value) {
-  return jspb.Message.setProto3StringField(this, 5, value);
-};
-
-
-/**
- * optional uint64 fileCount = 6;
- * @return {number}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getFilecount = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setFilecount = function(value) {
-  return jspb.Message.setProto3IntField(this, 6, value);
-};
-
-
-/**
- * optional uint64 totalFileSize = 7;
- * @return {number}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getTotalfilesize = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setTotalfilesize = function(value) {
-  return jspb.Message.setProto3IntField(this, 7, value);
-};
-
-
-/**
- * optional uint64 totalTransferReceiveTimeInMicroseconds = 8;
- * @return {number}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getTotaltransferreceivetimeinmicroseconds = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setTotaltransferreceivetimeinmicroseconds = function(value) {
-  return jspb.Message.setProto3IntField(this, 8, value);
-};
-
-
-/**
- * optional uint64 totalWriteIoTimeInMicroseconds = 9;
- * @return {number}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getTotalwriteiotimeinmicroseconds = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setTotalwriteiotimeinmicroseconds = function(value) {
-  return jspb.Message.setProto3IntField(this, 9, value);
-};
-
-
-/**
- * optional uint64 totalDbTimeInMicroseconds = 10;
- * @return {number}
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.getTotaldbtimeinmicroseconds = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 10, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.ProducerToReceiverTransferDataPoint} returns this
- */
-proto.ProducerToReceiverTransferDataPoint.prototype.setTotaldbtimeinmicroseconds = function(value) {
-  return jspb.Message.setProto3IntField(this, 10, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.BrokerRequestDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.BrokerRequestDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.BrokerRequestDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.BrokerRequestDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    pipelinestepid: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    consumerinstanceid: jspb.Message.getFieldWithDefault(msg, 2, ""),
-    command: jspb.Message.getFieldWithDefault(msg, 3, ""),
-    beamtime: jspb.Message.getFieldWithDefault(msg, 4, ""),
-    source: jspb.Message.getFieldWithDefault(msg, 5, ""),
-    stream: jspb.Message.getFieldWithDefault(msg, 6, ""),
-    groupid: jspb.Message.getFieldWithDefault(msg, 7, ""),
-    filecount: jspb.Message.getFieldWithDefault(msg, 8, 0),
-    totalfilesize: jspb.Message.getFieldWithDefault(msg, 9, 0),
-    delayms: jspb.Message.getFieldWithDefault(msg, 10, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.BrokerRequestDataPoint}
- */
-proto.BrokerRequestDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.BrokerRequestDataPoint;
-  return proto.BrokerRequestDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.BrokerRequestDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.BrokerRequestDataPoint}
- */
-proto.BrokerRequestDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setPipelinestepid(value);
-      break;
-    case 2:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setConsumerinstanceid(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setCommand(value);
-      break;
-    case 4:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBeamtime(value);
-      break;
-    case 5:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setSource(value);
-      break;
-    case 6:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setStream(value);
-      break;
-    case 7:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setGroupid(value);
-      break;
-    case 8:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setFilecount(value);
-      break;
-    case 9:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalfilesize(value);
-      break;
-    case 10:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setDelayms(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.BrokerRequestDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.BrokerRequestDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.BrokerRequestDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.BrokerRequestDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getPipelinestepid();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getConsumerinstanceid();
-  if (f.length > 0) {
-    writer.writeString(
-      2,
-      f
-    );
-  }
-  f = message.getCommand();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-  f = message.getBeamtime();
-  if (f.length > 0) {
-    writer.writeString(
-      4,
-      f
-    );
-  }
-  f = message.getSource();
-  if (f.length > 0) {
-    writer.writeString(
-      5,
-      f
-    );
-  }
-  f = message.getStream();
-  if (f.length > 0) {
-    writer.writeString(
-      6,
-      f
-    );
-  }
-  f = message.getGroupid();
-  if (f.length > 0) {
-    writer.writeString(
-      7,
-      f
-    );
-  }
-  f = message.getFilecount();
-  if (f !== 0) {
-    writer.writeUint64(
-      8,
-      f
-    );
-  }
-  f = message.getTotalfilesize();
-  if (f !== 0) {
-    writer.writeUint64(
-      9,
-      f
-    );
-  }
-  f = message.getDelayms();
-  if (f !== 0) {
-    writer.writeUint64(
-      10,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string pipelineStepId = 1;
- * @return {string}
- */
-proto.BrokerRequestDataPoint.prototype.getPipelinestepid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setPipelinestepid = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional string consumerInstanceId = 2;
- * @return {string}
- */
-proto.BrokerRequestDataPoint.prototype.getConsumerinstanceid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setConsumerinstanceid = function(value) {
-  return jspb.Message.setProto3StringField(this, 2, value);
-};
-
-
-/**
- * optional string command = 3;
- * @return {string}
- */
-proto.BrokerRequestDataPoint.prototype.getCommand = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setCommand = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-/**
- * optional string beamtime = 4;
- * @return {string}
- */
-proto.BrokerRequestDataPoint.prototype.getBeamtime = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setBeamtime = function(value) {
-  return jspb.Message.setProto3StringField(this, 4, value);
-};
-
-
-/**
- * optional string source = 5;
- * @return {string}
- */
-proto.BrokerRequestDataPoint.prototype.getSource = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setSource = function(value) {
-  return jspb.Message.setProto3StringField(this, 5, value);
-};
-
-
-/**
- * optional string stream = 6;
- * @return {string}
- */
-proto.BrokerRequestDataPoint.prototype.getStream = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setStream = function(value) {
-  return jspb.Message.setProto3StringField(this, 6, value);
-};
-
-
-/**
- * optional string groupId = 7;
- * @return {string}
- */
-proto.BrokerRequestDataPoint.prototype.getGroupid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setGroupid = function(value) {
-  return jspb.Message.setProto3StringField(this, 7, value);
-};
-
-
-/**
- * optional uint64 fileCount = 8;
- * @return {number}
- */
-proto.BrokerRequestDataPoint.prototype.getFilecount = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setFilecount = function(value) {
-  return jspb.Message.setProto3IntField(this, 8, value);
-};
-
-
-/**
- * optional uint64 totalFileSize = 9;
- * @return {number}
- */
-proto.BrokerRequestDataPoint.prototype.getTotalfilesize = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setTotalfilesize = function(value) {
-  return jspb.Message.setProto3IntField(this, 9, value);
-};
-
-
-/**
- * optional uint64 delayMs = 10;
- * @return {number}
- */
-proto.BrokerRequestDataPoint.prototype.getDelayms = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 10, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.BrokerRequestDataPoint} returns this
- */
-proto.BrokerRequestDataPoint.prototype.setDelayms = function(value) {
-  return jspb.Message.setProto3IntField(this, 10, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.RdsMemoryDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.RdsMemoryDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.RdsMemoryDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.RdsMemoryDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    beamtime: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    source: jspb.Message.getFieldWithDefault(msg, 2, ""),
-    stream: jspb.Message.getFieldWithDefault(msg, 3, ""),
-    usedbytes: jspb.Message.getFieldWithDefault(msg, 4, 0),
-    totalbytes: jspb.Message.getFieldWithDefault(msg, 5, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.RdsMemoryDataPoint}
- */
-proto.RdsMemoryDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.RdsMemoryDataPoint;
-  return proto.RdsMemoryDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.RdsMemoryDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.RdsMemoryDataPoint}
- */
-proto.RdsMemoryDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBeamtime(value);
-      break;
-    case 2:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setSource(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setStream(value);
-      break;
-    case 4:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setUsedbytes(value);
-      break;
-    case 5:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalbytes(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.RdsMemoryDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.RdsMemoryDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.RdsMemoryDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.RdsMemoryDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getBeamtime();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getSource();
-  if (f.length > 0) {
-    writer.writeString(
-      2,
-      f
-    );
-  }
-  f = message.getStream();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-  f = message.getUsedbytes();
-  if (f !== 0) {
-    writer.writeUint64(
-      4,
-      f
-    );
-  }
-  f = message.getTotalbytes();
-  if (f !== 0) {
-    writer.writeUint64(
-      5,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string beamtime = 1;
- * @return {string}
- */
-proto.RdsMemoryDataPoint.prototype.getBeamtime = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.RdsMemoryDataPoint} returns this
- */
-proto.RdsMemoryDataPoint.prototype.setBeamtime = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional string source = 2;
- * @return {string}
- */
-proto.RdsMemoryDataPoint.prototype.getSource = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.RdsMemoryDataPoint} returns this
- */
-proto.RdsMemoryDataPoint.prototype.setSource = function(value) {
-  return jspb.Message.setProto3StringField(this, 2, value);
-};
-
-
-/**
- * optional string stream = 3;
- * @return {string}
- */
-proto.RdsMemoryDataPoint.prototype.getStream = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.RdsMemoryDataPoint} returns this
- */
-proto.RdsMemoryDataPoint.prototype.setStream = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-/**
- * optional uint64 usedBytes = 4;
- * @return {number}
- */
-proto.RdsMemoryDataPoint.prototype.getUsedbytes = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.RdsMemoryDataPoint} returns this
- */
-proto.RdsMemoryDataPoint.prototype.setUsedbytes = function(value) {
-  return jspb.Message.setProto3IntField(this, 4, value);
-};
-
-
-/**
- * optional uint64 totalBytes = 5;
- * @return {number}
- */
-proto.RdsMemoryDataPoint.prototype.getTotalbytes = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.RdsMemoryDataPoint} returns this
- */
-proto.RdsMemoryDataPoint.prototype.setTotalbytes = function(value) {
-  return jspb.Message.setProto3IntField(this, 5, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.RdsToConsumerDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.RdsToConsumerDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.RdsToConsumerDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.RdsToConsumerDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    pipelinestepid: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    consumerinstanceid: jspb.Message.getFieldWithDefault(msg, 2, ""),
-    beamtime: jspb.Message.getFieldWithDefault(msg, 3, ""),
-    source: jspb.Message.getFieldWithDefault(msg, 4, ""),
-    stream: jspb.Message.getFieldWithDefault(msg, 5, ""),
-    hits: jspb.Message.getFieldWithDefault(msg, 6, 0),
-    misses: jspb.Message.getFieldWithDefault(msg, 7, 0),
-    totalfilesize: jspb.Message.getFieldWithDefault(msg, 8, 0),
-    totaltransfersendtimeinmicroseconds: jspb.Message.getFieldWithDefault(msg, 9, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.RdsToConsumerDataPoint}
- */
-proto.RdsToConsumerDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.RdsToConsumerDataPoint;
-  return proto.RdsToConsumerDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.RdsToConsumerDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.RdsToConsumerDataPoint}
- */
-proto.RdsToConsumerDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setPipelinestepid(value);
-      break;
-    case 2:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setConsumerinstanceid(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBeamtime(value);
-      break;
-    case 4:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setSource(value);
-      break;
-    case 5:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setStream(value);
-      break;
-    case 6:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setHits(value);
-      break;
-    case 7:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setMisses(value);
-      break;
-    case 8:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalfilesize(value);
-      break;
-    case 9:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotaltransfersendtimeinmicroseconds(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.RdsToConsumerDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.RdsToConsumerDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.RdsToConsumerDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.RdsToConsumerDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getPipelinestepid();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getConsumerinstanceid();
-  if (f.length > 0) {
-    writer.writeString(
-      2,
-      f
-    );
-  }
-  f = message.getBeamtime();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-  f = message.getSource();
-  if (f.length > 0) {
-    writer.writeString(
-      4,
-      f
-    );
-  }
-  f = message.getStream();
-  if (f.length > 0) {
-    writer.writeString(
-      5,
-      f
-    );
-  }
-  f = message.getHits();
-  if (f !== 0) {
-    writer.writeUint64(
-      6,
-      f
-    );
-  }
-  f = message.getMisses();
-  if (f !== 0) {
-    writer.writeUint64(
-      7,
-      f
-    );
-  }
-  f = message.getTotalfilesize();
-  if (f !== 0) {
-    writer.writeUint64(
-      8,
-      f
-    );
-  }
-  f = message.getTotaltransfersendtimeinmicroseconds();
-  if (f !== 0) {
-    writer.writeUint64(
-      9,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string pipelineStepId = 1;
- * @return {string}
- */
-proto.RdsToConsumerDataPoint.prototype.getPipelinestepid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setPipelinestepid = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional string consumerInstanceId = 2;
- * @return {string}
- */
-proto.RdsToConsumerDataPoint.prototype.getConsumerinstanceid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setConsumerinstanceid = function(value) {
-  return jspb.Message.setProto3StringField(this, 2, value);
-};
-
-
-/**
- * optional string beamtime = 3;
- * @return {string}
- */
-proto.RdsToConsumerDataPoint.prototype.getBeamtime = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setBeamtime = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-/**
- * optional string source = 4;
- * @return {string}
- */
-proto.RdsToConsumerDataPoint.prototype.getSource = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setSource = function(value) {
-  return jspb.Message.setProto3StringField(this, 4, value);
-};
-
-
-/**
- * optional string stream = 5;
- * @return {string}
- */
-proto.RdsToConsumerDataPoint.prototype.getStream = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setStream = function(value) {
-  return jspb.Message.setProto3StringField(this, 5, value);
-};
-
-
-/**
- * optional uint64 hits = 6;
- * @return {number}
- */
-proto.RdsToConsumerDataPoint.prototype.getHits = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setHits = function(value) {
-  return jspb.Message.setProto3IntField(this, 6, value);
-};
-
-
-/**
- * optional uint64 misses = 7;
- * @return {number}
- */
-proto.RdsToConsumerDataPoint.prototype.getMisses = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setMisses = function(value) {
-  return jspb.Message.setProto3IntField(this, 7, value);
-};
-
-
-/**
- * optional uint64 totalFileSize = 8;
- * @return {number}
- */
-proto.RdsToConsumerDataPoint.prototype.getTotalfilesize = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setTotalfilesize = function(value) {
-  return jspb.Message.setProto3IntField(this, 8, value);
-};
-
-
-/**
- * optional uint64 totalTransferSendTimeInMicroseconds = 9;
- * @return {number}
- */
-proto.RdsToConsumerDataPoint.prototype.getTotaltransfersendtimeinmicroseconds = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.RdsToConsumerDataPoint} returns this
- */
-proto.RdsToConsumerDataPoint.prototype.setTotaltransfersendtimeinmicroseconds = function(value) {
-  return jspb.Message.setProto3IntField(this, 9, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.FdsToConsumerDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.FdsToConsumerDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.FdsToConsumerDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.FdsToConsumerDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    pipelinestepid: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    consumerinstanceid: jspb.Message.getFieldWithDefault(msg, 2, ""),
-    beamtime: jspb.Message.getFieldWithDefault(msg, 3, ""),
-    source: jspb.Message.getFieldWithDefault(msg, 4, ""),
-    stream: jspb.Message.getFieldWithDefault(msg, 5, ""),
-    filecount: jspb.Message.getFieldWithDefault(msg, 6, 0),
-    totalfilesize: jspb.Message.getFieldWithDefault(msg, 7, 0),
-    totaltransfersendtimeinmicroseconds: jspb.Message.getFieldWithDefault(msg, 8, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.FdsToConsumerDataPoint}
- */
-proto.FdsToConsumerDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.FdsToConsumerDataPoint;
-  return proto.FdsToConsumerDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.FdsToConsumerDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.FdsToConsumerDataPoint}
- */
-proto.FdsToConsumerDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setPipelinestepid(value);
-      break;
-    case 2:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setConsumerinstanceid(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBeamtime(value);
-      break;
-    case 4:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setSource(value);
-      break;
-    case 5:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setStream(value);
-      break;
-    case 6:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setFilecount(value);
-      break;
-    case 7:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalfilesize(value);
-      break;
-    case 8:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotaltransfersendtimeinmicroseconds(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.FdsToConsumerDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.FdsToConsumerDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.FdsToConsumerDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.FdsToConsumerDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getPipelinestepid();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getConsumerinstanceid();
-  if (f.length > 0) {
-    writer.writeString(
-      2,
-      f
-    );
-  }
-  f = message.getBeamtime();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-  f = message.getSource();
-  if (f.length > 0) {
-    writer.writeString(
-      4,
-      f
-    );
-  }
-  f = message.getStream();
-  if (f.length > 0) {
-    writer.writeString(
-      5,
-      f
-    );
-  }
-  f = message.getFilecount();
-  if (f !== 0) {
-    writer.writeUint64(
-      6,
-      f
-    );
-  }
-  f = message.getTotalfilesize();
-  if (f !== 0) {
-    writer.writeUint64(
-      7,
-      f
-    );
-  }
-  f = message.getTotaltransfersendtimeinmicroseconds();
-  if (f !== 0) {
-    writer.writeUint64(
-      8,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string pipelineStepId = 1;
- * @return {string}
- */
-proto.FdsToConsumerDataPoint.prototype.getPipelinestepid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.FdsToConsumerDataPoint} returns this
- */
-proto.FdsToConsumerDataPoint.prototype.setPipelinestepid = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional string consumerInstanceId = 2;
- * @return {string}
- */
-proto.FdsToConsumerDataPoint.prototype.getConsumerinstanceid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.FdsToConsumerDataPoint} returns this
- */
-proto.FdsToConsumerDataPoint.prototype.setConsumerinstanceid = function(value) {
-  return jspb.Message.setProto3StringField(this, 2, value);
-};
-
-
-/**
- * optional string beamtime = 3;
- * @return {string}
- */
-proto.FdsToConsumerDataPoint.prototype.getBeamtime = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.FdsToConsumerDataPoint} returns this
- */
-proto.FdsToConsumerDataPoint.prototype.setBeamtime = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-/**
- * optional string source = 4;
- * @return {string}
- */
-proto.FdsToConsumerDataPoint.prototype.getSource = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.FdsToConsumerDataPoint} returns this
- */
-proto.FdsToConsumerDataPoint.prototype.setSource = function(value) {
-  return jspb.Message.setProto3StringField(this, 4, value);
-};
-
-
-/**
- * optional string stream = 5;
- * @return {string}
- */
-proto.FdsToConsumerDataPoint.prototype.getStream = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.FdsToConsumerDataPoint} returns this
- */
-proto.FdsToConsumerDataPoint.prototype.setStream = function(value) {
-  return jspb.Message.setProto3StringField(this, 5, value);
-};
-
-
-/**
- * optional uint64 fileCount = 6;
- * @return {number}
- */
-proto.FdsToConsumerDataPoint.prototype.getFilecount = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.FdsToConsumerDataPoint} returns this
- */
-proto.FdsToConsumerDataPoint.prototype.setFilecount = function(value) {
-  return jspb.Message.setProto3IntField(this, 6, value);
-};
-
-
-/**
- * optional uint64 totalFileSize = 7;
- * @return {number}
- */
-proto.FdsToConsumerDataPoint.prototype.getTotalfilesize = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.FdsToConsumerDataPoint} returns this
- */
-proto.FdsToConsumerDataPoint.prototype.setTotalfilesize = function(value) {
-  return jspb.Message.setProto3IntField(this, 7, value);
-};
-
-
-/**
- * optional uint64 totalTransferSendTimeInMicroseconds = 8;
- * @return {number}
- */
-proto.FdsToConsumerDataPoint.prototype.getTotaltransfersendtimeinmicroseconds = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.FdsToConsumerDataPoint} returns this
- */
-proto.FdsToConsumerDataPoint.prototype.setTotaltransfersendtimeinmicroseconds = function(value) {
-  return jspb.Message.setProto3IntField(this, 8, value);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.ReceiverDataPointContainer.repeatedFields_ = [3,4,5];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.ReceiverDataPointContainer.prototype.toObject = function(opt_includeInstance) {
-  return proto.ReceiverDataPointContainer.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.ReceiverDataPointContainer} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.ReceiverDataPointContainer.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    receivername: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    timestampms: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    groupedp2rtransfersList: jspb.Message.toObjectList(msg.getGroupedp2rtransfersList(),
-    proto.ProducerToReceiverTransferDataPoint.toObject, includeInstance),
-    groupedrds2ctransfersList: jspb.Message.toObjectList(msg.getGroupedrds2ctransfersList(),
-    proto.RdsToConsumerDataPoint.toObject, includeInstance),
-    groupedmemorystatsList: jspb.Message.toObjectList(msg.getGroupedmemorystatsList(),
-    proto.RdsMemoryDataPoint.toObject, includeInstance)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.ReceiverDataPointContainer}
- */
-proto.ReceiverDataPointContainer.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.ReceiverDataPointContainer;
-  return proto.ReceiverDataPointContainer.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.ReceiverDataPointContainer} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.ReceiverDataPointContainer}
- */
-proto.ReceiverDataPointContainer.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setReceivername(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTimestampms(value);
-      break;
-    case 3:
-      var value = new proto.ProducerToReceiverTransferDataPoint;
-      reader.readMessage(value,proto.ProducerToReceiverTransferDataPoint.deserializeBinaryFromReader);
-      msg.addGroupedp2rtransfers(value);
-      break;
-    case 4:
-      var value = new proto.RdsToConsumerDataPoint;
-      reader.readMessage(value,proto.RdsToConsumerDataPoint.deserializeBinaryFromReader);
-      msg.addGroupedrds2ctransfers(value);
-      break;
-    case 5:
-      var value = new proto.RdsMemoryDataPoint;
-      reader.readMessage(value,proto.RdsMemoryDataPoint.deserializeBinaryFromReader);
-      msg.addGroupedmemorystats(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.ReceiverDataPointContainer.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.ReceiverDataPointContainer.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.ReceiverDataPointContainer} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.ReceiverDataPointContainer.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getReceivername();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getTimestampms();
-  if (f !== 0) {
-    writer.writeUint64(
-      2,
-      f
-    );
-  }
-  f = message.getGroupedp2rtransfersList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      3,
-      f,
-      proto.ProducerToReceiverTransferDataPoint.serializeBinaryToWriter
-    );
-  }
-  f = message.getGroupedrds2ctransfersList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      4,
-      f,
-      proto.RdsToConsumerDataPoint.serializeBinaryToWriter
-    );
-  }
-  f = message.getGroupedmemorystatsList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      5,
-      f,
-      proto.RdsMemoryDataPoint.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * optional string receiverName = 1;
- * @return {string}
- */
-proto.ReceiverDataPointContainer.prototype.getReceivername = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.ReceiverDataPointContainer} returns this
- */
-proto.ReceiverDataPointContainer.prototype.setReceivername = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional uint64 timestampMs = 2;
- * @return {number}
- */
-proto.ReceiverDataPointContainer.prototype.getTimestampms = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.ReceiverDataPointContainer} returns this
- */
-proto.ReceiverDataPointContainer.prototype.setTimestampms = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * repeated ProducerToReceiverTransferDataPoint groupedP2rTransfers = 3;
- * @return {!Array<!proto.ProducerToReceiverTransferDataPoint>}
- */
-proto.ReceiverDataPointContainer.prototype.getGroupedp2rtransfersList = function() {
-  return /** @type{!Array<!proto.ProducerToReceiverTransferDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.ProducerToReceiverTransferDataPoint, 3));
-};
-
-
-/**
- * @param {!Array<!proto.ProducerToReceiverTransferDataPoint>} value
- * @return {!proto.ReceiverDataPointContainer} returns this
-*/
-proto.ReceiverDataPointContainer.prototype.setGroupedp2rtransfersList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 3, value);
-};
-
-
-/**
- * @param {!proto.ProducerToReceiverTransferDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.ProducerToReceiverTransferDataPoint}
- */
-proto.ReceiverDataPointContainer.prototype.addGroupedp2rtransfers = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.ProducerToReceiverTransferDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.ReceiverDataPointContainer} returns this
- */
-proto.ReceiverDataPointContainer.prototype.clearGroupedp2rtransfersList = function() {
-  return this.setGroupedp2rtransfersList([]);
-};
-
-
-/**
- * repeated RdsToConsumerDataPoint groupedRds2cTransfers = 4;
- * @return {!Array<!proto.RdsToConsumerDataPoint>}
- */
-proto.ReceiverDataPointContainer.prototype.getGroupedrds2ctransfersList = function() {
-  return /** @type{!Array<!proto.RdsToConsumerDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.RdsToConsumerDataPoint, 4));
-};
-
-
-/**
- * @param {!Array<!proto.RdsToConsumerDataPoint>} value
- * @return {!proto.ReceiverDataPointContainer} returns this
-*/
-proto.ReceiverDataPointContainer.prototype.setGroupedrds2ctransfersList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 4, value);
-};
-
-
-/**
- * @param {!proto.RdsToConsumerDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.RdsToConsumerDataPoint}
- */
-proto.ReceiverDataPointContainer.prototype.addGroupedrds2ctransfers = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.RdsToConsumerDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.ReceiverDataPointContainer} returns this
- */
-proto.ReceiverDataPointContainer.prototype.clearGroupedrds2ctransfersList = function() {
-  return this.setGroupedrds2ctransfersList([]);
-};
-
-
-/**
- * repeated RdsMemoryDataPoint groupedMemoryStats = 5;
- * @return {!Array<!proto.RdsMemoryDataPoint>}
- */
-proto.ReceiverDataPointContainer.prototype.getGroupedmemorystatsList = function() {
-  return /** @type{!Array<!proto.RdsMemoryDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.RdsMemoryDataPoint, 5));
-};
-
-
-/**
- * @param {!Array<!proto.RdsMemoryDataPoint>} value
- * @return {!proto.ReceiverDataPointContainer} returns this
-*/
-proto.ReceiverDataPointContainer.prototype.setGroupedmemorystatsList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 5, value);
-};
-
-
-/**
- * @param {!proto.RdsMemoryDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.RdsMemoryDataPoint}
- */
-proto.ReceiverDataPointContainer.prototype.addGroupedmemorystats = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 5, opt_value, proto.RdsMemoryDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.ReceiverDataPointContainer} returns this
- */
-proto.ReceiverDataPointContainer.prototype.clearGroupedmemorystatsList = function() {
-  return this.setGroupedmemorystatsList([]);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.BrokerDataPointContainer.repeatedFields_ = [3];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.BrokerDataPointContainer.prototype.toObject = function(opt_includeInstance) {
-  return proto.BrokerDataPointContainer.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.BrokerDataPointContainer} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.BrokerDataPointContainer.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    brokername: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    timestampms: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    groupedbrokerrequestsList: jspb.Message.toObjectList(msg.getGroupedbrokerrequestsList(),
-    proto.BrokerRequestDataPoint.toObject, includeInstance)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.BrokerDataPointContainer}
- */
-proto.BrokerDataPointContainer.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.BrokerDataPointContainer;
-  return proto.BrokerDataPointContainer.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.BrokerDataPointContainer} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.BrokerDataPointContainer}
- */
-proto.BrokerDataPointContainer.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBrokername(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTimestampms(value);
-      break;
-    case 3:
-      var value = new proto.BrokerRequestDataPoint;
-      reader.readMessage(value,proto.BrokerRequestDataPoint.deserializeBinaryFromReader);
-      msg.addGroupedbrokerrequests(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.BrokerDataPointContainer.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.BrokerDataPointContainer.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.BrokerDataPointContainer} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.BrokerDataPointContainer.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getBrokername();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getTimestampms();
-  if (f !== 0) {
-    writer.writeUint64(
-      2,
-      f
-    );
-  }
-  f = message.getGroupedbrokerrequestsList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      3,
-      f,
-      proto.BrokerRequestDataPoint.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * optional string brokerName = 1;
- * @return {string}
- */
-proto.BrokerDataPointContainer.prototype.getBrokername = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.BrokerDataPointContainer} returns this
- */
-proto.BrokerDataPointContainer.prototype.setBrokername = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional uint64 timestampMs = 2;
- * @return {number}
- */
-proto.BrokerDataPointContainer.prototype.getTimestampms = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.BrokerDataPointContainer} returns this
- */
-proto.BrokerDataPointContainer.prototype.setTimestampms = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * repeated BrokerRequestDataPoint groupedBrokerRequests = 3;
- * @return {!Array<!proto.BrokerRequestDataPoint>}
- */
-proto.BrokerDataPointContainer.prototype.getGroupedbrokerrequestsList = function() {
-  return /** @type{!Array<!proto.BrokerRequestDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.BrokerRequestDataPoint, 3));
-};
-
-
-/**
- * @param {!Array<!proto.BrokerRequestDataPoint>} value
- * @return {!proto.BrokerDataPointContainer} returns this
-*/
-proto.BrokerDataPointContainer.prototype.setGroupedbrokerrequestsList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 3, value);
-};
-
-
-/**
- * @param {!proto.BrokerRequestDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.BrokerRequestDataPoint}
- */
-proto.BrokerDataPointContainer.prototype.addGroupedbrokerrequests = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.BrokerRequestDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.BrokerDataPointContainer} returns this
- */
-proto.BrokerDataPointContainer.prototype.clearGroupedbrokerrequestsList = function() {
-  return this.setGroupedbrokerrequestsList([]);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.FtsToConsumerDataPointContainer.repeatedFields_ = [3];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.FtsToConsumerDataPointContainer.prototype.toObject = function(opt_includeInstance) {
-  return proto.FtsToConsumerDataPointContainer.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.FtsToConsumerDataPointContainer} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.FtsToConsumerDataPointContainer.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    ftsname: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    timestampms: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    groupedfdstransfersList: jspb.Message.toObjectList(msg.getGroupedfdstransfersList(),
-    proto.FdsToConsumerDataPoint.toObject, includeInstance)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.FtsToConsumerDataPointContainer}
- */
-proto.FtsToConsumerDataPointContainer.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.FtsToConsumerDataPointContainer;
-  return proto.FtsToConsumerDataPointContainer.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.FtsToConsumerDataPointContainer} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.FtsToConsumerDataPointContainer}
- */
-proto.FtsToConsumerDataPointContainer.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setFtsname(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTimestampms(value);
-      break;
-    case 3:
-      var value = new proto.FdsToConsumerDataPoint;
-      reader.readMessage(value,proto.FdsToConsumerDataPoint.deserializeBinaryFromReader);
-      msg.addGroupedfdstransfers(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.FtsToConsumerDataPointContainer.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.FtsToConsumerDataPointContainer.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.FtsToConsumerDataPointContainer} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.FtsToConsumerDataPointContainer.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getFtsname();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getTimestampms();
-  if (f !== 0) {
-    writer.writeUint64(
-      2,
-      f
-    );
-  }
-  f = message.getGroupedfdstransfersList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      3,
-      f,
-      proto.FdsToConsumerDataPoint.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * optional string ftsName = 1;
- * @return {string}
- */
-proto.FtsToConsumerDataPointContainer.prototype.getFtsname = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.FtsToConsumerDataPointContainer} returns this
- */
-proto.FtsToConsumerDataPointContainer.prototype.setFtsname = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional uint64 timestampMs = 2;
- * @return {number}
- */
-proto.FtsToConsumerDataPointContainer.prototype.getTimestampms = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.FtsToConsumerDataPointContainer} returns this
- */
-proto.FtsToConsumerDataPointContainer.prototype.setTimestampms = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * repeated FdsToConsumerDataPoint groupedFdsTransfers = 3;
- * @return {!Array<!proto.FdsToConsumerDataPoint>}
- */
-proto.FtsToConsumerDataPointContainer.prototype.getGroupedfdstransfersList = function() {
-  return /** @type{!Array<!proto.FdsToConsumerDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.FdsToConsumerDataPoint, 3));
-};
-
-
-/**
- * @param {!Array<!proto.FdsToConsumerDataPoint>} value
- * @return {!proto.FtsToConsumerDataPointContainer} returns this
-*/
-proto.FtsToConsumerDataPointContainer.prototype.setGroupedfdstransfersList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 3, value);
-};
-
-
-/**
- * @param {!proto.FdsToConsumerDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.FdsToConsumerDataPoint}
- */
-proto.FtsToConsumerDataPointContainer.prototype.addGroupedfdstransfers = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.FdsToConsumerDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.FtsToConsumerDataPointContainer} returns this
- */
-proto.FtsToConsumerDataPointContainer.prototype.clearGroupedfdstransfersList = function() {
-  return this.setGroupedfdstransfersList([]);
-};
-
-
-goog.object.extend(exports, proto);
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_grpc_web_pb.d.ts b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_grpc_web_pb.d.ts
deleted file mode 100644
index 2a969296842f974f7ec573a98aea65a4a2ff2847..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_grpc_web_pb.d.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import * as grpcWeb from 'grpc-web';
-
-import * as AsapoMonitoringCommonService_pb from './AsapoMonitoringCommonService_pb';
-import * as AsapoMonitoringQueryService_pb from './AsapoMonitoringQueryService_pb';
-
-
-export class AsapoMonitoringQueryServiceClient {
-  constructor (hostname: string,
-               credentials?: null | { [index: string]: string; },
-               options?: null | { [index: string]: any; });
-
-  getMetadata(
-    request: AsapoMonitoringCommonService_pb.Empty,
-    metadata: grpcWeb.Metadata | undefined,
-    callback: (err: grpcWeb.Error,
-               response: AsapoMonitoringQueryService_pb.MetadataResponse) => void
-  ): grpcWeb.ClientReadableStream<AsapoMonitoringQueryService_pb.MetadataResponse>;
-
-  getTopology(
-    request: AsapoMonitoringQueryService_pb.ToplogyQuery,
-    metadata: grpcWeb.Metadata | undefined,
-    callback: (err: grpcWeb.Error,
-               response: AsapoMonitoringQueryService_pb.TopologyResponse) => void
-  ): grpcWeb.ClientReadableStream<AsapoMonitoringQueryService_pb.TopologyResponse>;
-
-  getDataPoints(
-    request: AsapoMonitoringQueryService_pb.DataPointsQuery,
-    metadata: grpcWeb.Metadata | undefined,
-    callback: (err: grpcWeb.Error,
-               response: AsapoMonitoringQueryService_pb.DataPointsResponse) => void
-  ): grpcWeb.ClientReadableStream<AsapoMonitoringQueryService_pb.DataPointsResponse>;
-
-  getGroupDelay(
-    request: AsapoMonitoringQueryService_pb.GroupDelayQuery,
-    metadata: grpcWeb.Metadata | undefined,
-    callback: (err: grpcWeb.Error,
-               response: AsapoMonitoringQueryService_pb.GroupDelayResponse) => void
-  ): grpcWeb.ClientReadableStream<AsapoMonitoringQueryService_pb.GroupDelayResponse>;
-
-}
-
-export class AsapoMonitoringQueryServicePromiseClient {
-  constructor (hostname: string,
-               credentials?: null | { [index: string]: string; },
-               options?: null | { [index: string]: any; });
-
-  getMetadata(
-    request: AsapoMonitoringCommonService_pb.Empty,
-    metadata?: grpcWeb.Metadata
-  ): Promise<AsapoMonitoringQueryService_pb.MetadataResponse>;
-
-  getTopology(
-    request: AsapoMonitoringQueryService_pb.ToplogyQuery,
-    metadata?: grpcWeb.Metadata
-  ): Promise<AsapoMonitoringQueryService_pb.TopologyResponse>;
-
-  getDataPoints(
-    request: AsapoMonitoringQueryService_pb.DataPointsQuery,
-    metadata?: grpcWeb.Metadata
-  ): Promise<AsapoMonitoringQueryService_pb.DataPointsResponse>;
-
-  getGroupDelay(
-    request: AsapoMonitoringQueryService_pb.GroupDelayQuery,
-    metadata?: grpcWeb.Metadata
-  ): Promise<AsapoMonitoringQueryService_pb.GroupDelayResponse>;
-
-}
-
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_grpc_web_pb.js b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_grpc_web_pb.js
deleted file mode 100644
index ab80ef904e423e31fe60a0276a97834f50d8c2f7..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_grpc_web_pb.js
+++ /dev/null
@@ -1,395 +0,0 @@
-/**
- * @fileoverview gRPC-Web generated client stub for 
- * @enhanceable
- * @public
- */
-
-// GENERATED CODE -- DO NOT EDIT!
-
-
-/* eslint-disable */
-// @ts-nocheck
-
-
-
-const grpc = {};
-grpc.web = require('grpc-web');
-
-
-var AsapoMonitoringCommonService_pb = require('./AsapoMonitoringCommonService_pb.js')
-const proto = require('./AsapoMonitoringQueryService_pb.js');
-
-/**
- * @param {string} hostname
- * @param {?Object} credentials
- * @param {?Object} options
- * @constructor
- * @struct
- * @final
- */
-proto.AsapoMonitoringQueryServiceClient =
-    function(hostname, credentials, options) {
-  if (!options) options = {};
-  options['format'] = 'text';
-
-  /**
-   * @private @const {!grpc.web.GrpcWebClientBase} The client
-   */
-  this.client_ = new grpc.web.GrpcWebClientBase(options);
-
-  /**
-   * @private @const {string} The hostname
-   */
-  this.hostname_ = hostname;
-
-};
-
-
-/**
- * @param {string} hostname
- * @param {?Object} credentials
- * @param {?Object} options
- * @constructor
- * @struct
- * @final
- */
-proto.AsapoMonitoringQueryServicePromiseClient =
-    function(hostname, credentials, options) {
-  if (!options) options = {};
-  options['format'] = 'text';
-
-  /**
-   * @private @const {!grpc.web.GrpcWebClientBase} The client
-   */
-  this.client_ = new grpc.web.GrpcWebClientBase(options);
-
-  /**
-   * @private @const {string} The hostname
-   */
-  this.hostname_ = hostname;
-
-};
-
-
-/**
- * @const
- * @type {!grpc.web.MethodDescriptor<
- *   !proto.Empty,
- *   !proto.MetadataResponse>}
- */
-const methodDescriptor_AsapoMonitoringQueryService_GetMetadata = new grpc.web.MethodDescriptor(
-  '/AsapoMonitoringQueryService/GetMetadata',
-  grpc.web.MethodType.UNARY,
-  AsapoMonitoringCommonService_pb.Empty,
-  proto.MetadataResponse,
-  /**
-   * @param {!proto.Empty} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  proto.MetadataResponse.deserializeBinary
-);
-
-
-/**
- * @const
- * @type {!grpc.web.AbstractClientBase.MethodInfo<
- *   !proto.Empty,
- *   !proto.MetadataResponse>}
- */
-const methodInfo_AsapoMonitoringQueryService_GetMetadata = new grpc.web.AbstractClientBase.MethodInfo(
-  proto.MetadataResponse,
-  /**
-   * @param {!proto.Empty} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  proto.MetadataResponse.deserializeBinary
-);
-
-
-/**
- * @param {!proto.Empty} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @param {function(?grpc.web.Error, ?proto.MetadataResponse)}
- *     callback The callback function(error, response)
- * @return {!grpc.web.ClientReadableStream<!proto.MetadataResponse>|undefined}
- *     The XHR Node Readable Stream
- */
-proto.AsapoMonitoringQueryServiceClient.prototype.getMetadata =
-    function(request, metadata, callback) {
-  return this.client_.rpcCall(this.hostname_ +
-      '/AsapoMonitoringQueryService/GetMetadata',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringQueryService_GetMetadata,
-      callback);
-};
-
-
-/**
- * @param {!proto.Empty} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @return {!Promise<!proto.MetadataResponse>}
- *     Promise that resolves to the response
- */
-proto.AsapoMonitoringQueryServicePromiseClient.prototype.getMetadata =
-    function(request, metadata) {
-  return this.client_.unaryCall(this.hostname_ +
-      '/AsapoMonitoringQueryService/GetMetadata',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringQueryService_GetMetadata);
-};
-
-
-/**
- * @const
- * @type {!grpc.web.MethodDescriptor<
- *   !proto.ToplogyQuery,
- *   !proto.TopologyResponse>}
- */
-const methodDescriptor_AsapoMonitoringQueryService_GetTopology = new grpc.web.MethodDescriptor(
-  '/AsapoMonitoringQueryService/GetTopology',
-  grpc.web.MethodType.UNARY,
-  proto.ToplogyQuery,
-  proto.TopologyResponse,
-  /**
-   * @param {!proto.ToplogyQuery} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  proto.TopologyResponse.deserializeBinary
-);
-
-
-/**
- * @const
- * @type {!grpc.web.AbstractClientBase.MethodInfo<
- *   !proto.ToplogyQuery,
- *   !proto.TopologyResponse>}
- */
-const methodInfo_AsapoMonitoringQueryService_GetTopology = new grpc.web.AbstractClientBase.MethodInfo(
-  proto.TopologyResponse,
-  /**
-   * @param {!proto.ToplogyQuery} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  proto.TopologyResponse.deserializeBinary
-);
-
-
-/**
- * @param {!proto.ToplogyQuery} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @param {function(?grpc.web.Error, ?proto.TopologyResponse)}
- *     callback The callback function(error, response)
- * @return {!grpc.web.ClientReadableStream<!proto.TopologyResponse>|undefined}
- *     The XHR Node Readable Stream
- */
-proto.AsapoMonitoringQueryServiceClient.prototype.getTopology =
-    function(request, metadata, callback) {
-  return this.client_.rpcCall(this.hostname_ +
-      '/AsapoMonitoringQueryService/GetTopology',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringQueryService_GetTopology,
-      callback);
-};
-
-
-/**
- * @param {!proto.ToplogyQuery} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @return {!Promise<!proto.TopologyResponse>}
- *     Promise that resolves to the response
- */
-proto.AsapoMonitoringQueryServicePromiseClient.prototype.getTopology =
-    function(request, metadata) {
-  return this.client_.unaryCall(this.hostname_ +
-      '/AsapoMonitoringQueryService/GetTopology',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringQueryService_GetTopology);
-};
-
-
-/**
- * @const
- * @type {!grpc.web.MethodDescriptor<
- *   !proto.DataPointsQuery,
- *   !proto.DataPointsResponse>}
- */
-const methodDescriptor_AsapoMonitoringQueryService_GetDataPoints = new grpc.web.MethodDescriptor(
-  '/AsapoMonitoringQueryService/GetDataPoints',
-  grpc.web.MethodType.UNARY,
-  proto.DataPointsQuery,
-  proto.DataPointsResponse,
-  /**
-   * @param {!proto.DataPointsQuery} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  proto.DataPointsResponse.deserializeBinary
-);
-
-
-/**
- * @const
- * @type {!grpc.web.AbstractClientBase.MethodInfo<
- *   !proto.DataPointsQuery,
- *   !proto.DataPointsResponse>}
- */
-const methodInfo_AsapoMonitoringQueryService_GetDataPoints = new grpc.web.AbstractClientBase.MethodInfo(
-  proto.DataPointsResponse,
-  /**
-   * @param {!proto.DataPointsQuery} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  proto.DataPointsResponse.deserializeBinary
-);
-
-
-/**
- * @param {!proto.DataPointsQuery} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @param {function(?grpc.web.Error, ?proto.DataPointsResponse)}
- *     callback The callback function(error, response)
- * @return {!grpc.web.ClientReadableStream<!proto.DataPointsResponse>|undefined}
- *     The XHR Node Readable Stream
- */
-proto.AsapoMonitoringQueryServiceClient.prototype.getDataPoints =
-    function(request, metadata, callback) {
-  return this.client_.rpcCall(this.hostname_ +
-      '/AsapoMonitoringQueryService/GetDataPoints',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringQueryService_GetDataPoints,
-      callback);
-};
-
-
-/**
- * @param {!proto.DataPointsQuery} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @return {!Promise<!proto.DataPointsResponse>}
- *     Promise that resolves to the response
- */
-proto.AsapoMonitoringQueryServicePromiseClient.prototype.getDataPoints =
-    function(request, metadata) {
-  return this.client_.unaryCall(this.hostname_ +
-      '/AsapoMonitoringQueryService/GetDataPoints',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringQueryService_GetDataPoints);
-};
-
-
-/**
- * @const
- * @type {!grpc.web.MethodDescriptor<
- *   !proto.GroupDelayQuery,
- *   !proto.GroupDelayResponse>}
- */
-const methodDescriptor_AsapoMonitoringQueryService_GetGroupDelay = new grpc.web.MethodDescriptor(
-  '/AsapoMonitoringQueryService/GetGroupDelay',
-  grpc.web.MethodType.UNARY,
-  proto.GroupDelayQuery,
-  proto.GroupDelayResponse,
-  /**
-   * @param {!proto.GroupDelayQuery} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  proto.GroupDelayResponse.deserializeBinary
-);
-
-
-/**
- * @const
- * @type {!grpc.web.AbstractClientBase.MethodInfo<
- *   !proto.GroupDelayQuery,
- *   !proto.GroupDelayResponse>}
- */
-const methodInfo_AsapoMonitoringQueryService_GetGroupDelay = new grpc.web.AbstractClientBase.MethodInfo(
-  proto.GroupDelayResponse,
-  /**
-   * @param {!proto.GroupDelayQuery} request
-   * @return {!Uint8Array}
-   */
-  function(request) {
-    return request.serializeBinary();
-  },
-  proto.GroupDelayResponse.deserializeBinary
-);
-
-
-/**
- * @param {!proto.GroupDelayQuery} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @param {function(?grpc.web.Error, ?proto.GroupDelayResponse)}
- *     callback The callback function(error, response)
- * @return {!grpc.web.ClientReadableStream<!proto.GroupDelayResponse>|undefined}
- *     The XHR Node Readable Stream
- */
-proto.AsapoMonitoringQueryServiceClient.prototype.getGroupDelay =
-    function(request, metadata, callback) {
-  return this.client_.rpcCall(this.hostname_ +
-      '/AsapoMonitoringQueryService/GetGroupDelay',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringQueryService_GetGroupDelay,
-      callback);
-};
-
-
-/**
- * @param {!proto.GroupDelayQuery} request The
- *     request proto
- * @param {?Object<string, string>} metadata User defined
- *     call metadata
- * @return {!Promise<!proto.GroupDelayResponse>}
- *     Promise that resolves to the response
- */
-proto.AsapoMonitoringQueryServicePromiseClient.prototype.getGroupDelay =
-    function(request, metadata) {
-  return this.client_.unaryCall(this.hostname_ +
-      '/AsapoMonitoringQueryService/GetGroupDelay',
-      request,
-      metadata || {},
-      methodDescriptor_AsapoMonitoringQueryService_GetGroupDelay);
-};
-
-
-module.exports = proto;
-
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_pb.d.ts b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_pb.d.ts
deleted file mode 100644
index 5118aceb067a5f31fdf0690dbae663d6e19caab8..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_pb.d.ts
+++ /dev/null
@@ -1,424 +0,0 @@
-import * as jspb from 'google-protobuf'
-
-import * as AsapoMonitoringCommonService_pb from './AsapoMonitoringCommonService_pb';
-
-
-export class DataPointsQuery extends jspb.Message {
-  getFromtimestamp(): number;
-  setFromtimestamp(value: number): DataPointsQuery;
-
-  getTotimestamp(): number;
-  setTotimestamp(value: number): DataPointsQuery;
-
-  getBeamtimefilter(): string;
-  setBeamtimefilter(value: string): DataPointsQuery;
-
-  getSourcefilter(): string;
-  setSourcefilter(value: string): DataPointsQuery;
-
-  getReceiverfilter(): string;
-  setReceiverfilter(value: string): DataPointsQuery;
-
-  getFrompipelinestepfilter(): string;
-  setFrompipelinestepfilter(value: string): DataPointsQuery;
-
-  getTopipelinestepfilter(): string;
-  setTopipelinestepfilter(value: string): DataPointsQuery;
-
-  getPipelinequerymode(): ipelineConnectionQueryMode;
-  setPipelinequerymode(value: ipelineConnectionQueryMode): DataPointsQuery;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): DataPointsQuery.AsObject;
-  static toObject(includeInstance: boolean, msg: DataPointsQuery): DataPointsQuery.AsObject;
-  static serializeBinaryToWriter(message: DataPointsQuery, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): DataPointsQuery;
-  static deserializeBinaryFromReader(message: DataPointsQuery, reader: jspb.BinaryReader): DataPointsQuery;
-}
-
-export namespace DataPointsQuery {
-  export type AsObject = {
-    fromtimestamp: number,
-    totimestamp: number,
-    beamtimefilter: string,
-    sourcefilter: string,
-    receiverfilter: string,
-    frompipelinestepfilter: string,
-    topipelinestepfilter: string,
-    pipelinequerymode: ipelineConnectionQueryMode,
-  }
-}
-
-export class TotalTransferRateDataPoint extends jspb.Message {
-  getTotalbytespersecrecv(): number;
-  setTotalbytespersecrecv(value: number): TotalTransferRateDataPoint;
-
-  getTotalbytespersecsend(): number;
-  setTotalbytespersecsend(value: number): TotalTransferRateDataPoint;
-
-  getTotalbytespersecrdssend(): number;
-  setTotalbytespersecrdssend(value: number): TotalTransferRateDataPoint;
-
-  getTotalbytespersecftssend(): number;
-  setTotalbytespersecftssend(value: number): TotalTransferRateDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): TotalTransferRateDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: TotalTransferRateDataPoint): TotalTransferRateDataPoint.AsObject;
-  static serializeBinaryToWriter(message: TotalTransferRateDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): TotalTransferRateDataPoint;
-  static deserializeBinaryFromReader(message: TotalTransferRateDataPoint, reader: jspb.BinaryReader): TotalTransferRateDataPoint;
-}
-
-export namespace TotalTransferRateDataPoint {
-  export type AsObject = {
-    totalbytespersecrecv: number,
-    totalbytespersecsend: number,
-    totalbytespersecrdssend: number,
-    totalbytespersecftssend: number,
-  }
-}
-
-export class TotalFileRateDataPoint extends jspb.Message {
-  getTotalrequests(): number;
-  setTotalrequests(value: number): TotalFileRateDataPoint;
-
-  getCachemisses(): number;
-  setCachemisses(value: number): TotalFileRateDataPoint;
-
-  getFromcache(): number;
-  setFromcache(value: number): TotalFileRateDataPoint;
-
-  getFromdisk(): number;
-  setFromdisk(value: number): TotalFileRateDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): TotalFileRateDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: TotalFileRateDataPoint): TotalFileRateDataPoint.AsObject;
-  static serializeBinaryToWriter(message: TotalFileRateDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): TotalFileRateDataPoint;
-  static deserializeBinaryFromReader(message: TotalFileRateDataPoint, reader: jspb.BinaryReader): TotalFileRateDataPoint;
-}
-
-export namespace TotalFileRateDataPoint {
-  export type AsObject = {
-    totalrequests: number,
-    cachemisses: number,
-    fromcache: number,
-    fromdisk: number,
-  }
-}
-
-export class TaskTimeDataPoint extends jspb.Message {
-  getReceiveiotimeus(): number;
-  setReceiveiotimeus(value: number): TaskTimeDataPoint;
-
-  getWritetodisktimeus(): number;
-  setWritetodisktimeus(value: number): TaskTimeDataPoint;
-
-  getWritetodatabasetimeus(): number;
-  setWritetodatabasetimeus(value: number): TaskTimeDataPoint;
-
-  getRdssendtoconsumertimeus(): number;
-  setRdssendtoconsumertimeus(value: number): TaskTimeDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): TaskTimeDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: TaskTimeDataPoint): TaskTimeDataPoint.AsObject;
-  static serializeBinaryToWriter(message: TaskTimeDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): TaskTimeDataPoint;
-  static deserializeBinaryFromReader(message: TaskTimeDataPoint, reader: jspb.BinaryReader): TaskTimeDataPoint;
-}
-
-export namespace TaskTimeDataPoint {
-  export type AsObject = {
-    receiveiotimeus: number,
-    writetodisktimeus: number,
-    writetodatabasetimeus: number,
-    rdssendtoconsumertimeus: number,
-  }
-}
-
-export class RdsMemoryUsageDataPoint extends jspb.Message {
-  getTotalusedmemory(): number;
-  setTotalusedmemory(value: number): RdsMemoryUsageDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): RdsMemoryUsageDataPoint.AsObject;
-  static toObject(includeInstance: boolean, msg: RdsMemoryUsageDataPoint): RdsMemoryUsageDataPoint.AsObject;
-  static serializeBinaryToWriter(message: RdsMemoryUsageDataPoint, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): RdsMemoryUsageDataPoint;
-  static deserializeBinaryFromReader(message: RdsMemoryUsageDataPoint, reader: jspb.BinaryReader): RdsMemoryUsageDataPoint;
-}
-
-export namespace RdsMemoryUsageDataPoint {
-  export type AsObject = {
-    totalusedmemory: number,
-  }
-}
-
-export class DataPointsResponse extends jspb.Message {
-  getStarttimestampinsec(): number;
-  setStarttimestampinsec(value: number): DataPointsResponse;
-
-  getTimeintervalinsec(): number;
-  setTimeintervalinsec(value: number): DataPointsResponse;
-
-  getTransferratesList(): Array<TotalTransferRateDataPoint>;
-  setTransferratesList(value: Array<TotalTransferRateDataPoint>): DataPointsResponse;
-  clearTransferratesList(): DataPointsResponse;
-  addTransferrates(value?: TotalTransferRateDataPoint, index?: number): TotalTransferRateDataPoint;
-
-  getFileratesList(): Array<TotalFileRateDataPoint>;
-  setFileratesList(value: Array<TotalFileRateDataPoint>): DataPointsResponse;
-  clearFileratesList(): DataPointsResponse;
-  addFilerates(value?: TotalFileRateDataPoint, index?: number): TotalFileRateDataPoint;
-
-  getTasktimesList(): Array<TaskTimeDataPoint>;
-  setTasktimesList(value: Array<TaskTimeDataPoint>): DataPointsResponse;
-  clearTasktimesList(): DataPointsResponse;
-  addTasktimes(value?: TaskTimeDataPoint, index?: number): TaskTimeDataPoint;
-
-  getMemoryusagesList(): Array<RdsMemoryUsageDataPoint>;
-  setMemoryusagesList(value: Array<RdsMemoryUsageDataPoint>): DataPointsResponse;
-  clearMemoryusagesList(): DataPointsResponse;
-  addMemoryusages(value?: RdsMemoryUsageDataPoint, index?: number): RdsMemoryUsageDataPoint;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): DataPointsResponse.AsObject;
-  static toObject(includeInstance: boolean, msg: DataPointsResponse): DataPointsResponse.AsObject;
-  static serializeBinaryToWriter(message: DataPointsResponse, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): DataPointsResponse;
-  static deserializeBinaryFromReader(message: DataPointsResponse, reader: jspb.BinaryReader): DataPointsResponse;
-}
-
-export namespace DataPointsResponse {
-  export type AsObject = {
-    starttimestampinsec: number,
-    timeintervalinsec: number,
-    transferratesList: Array<TotalTransferRateDataPoint.AsObject>,
-    fileratesList: Array<TotalFileRateDataPoint.AsObject>,
-    tasktimesList: Array<TaskTimeDataPoint.AsObject>,
-    memoryusagesList: Array<RdsMemoryUsageDataPoint.AsObject>,
-  }
-}
-
-export class MetadataResponse extends jspb.Message {
-  getClustername(): string;
-  setClustername(value: string): MetadataResponse;
-
-  getAvailablebeamtimesList(): Array<string>;
-  setAvailablebeamtimesList(value: Array<string>): MetadataResponse;
-  clearAvailablebeamtimesList(): MetadataResponse;
-  addAvailablebeamtimes(value: string, index?: number): MetadataResponse;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): MetadataResponse.AsObject;
-  static toObject(includeInstance: boolean, msg: MetadataResponse): MetadataResponse.AsObject;
-  static serializeBinaryToWriter(message: MetadataResponse, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): MetadataResponse;
-  static deserializeBinaryFromReader(message: MetadataResponse, reader: jspb.BinaryReader): MetadataResponse;
-}
-
-export namespace MetadataResponse {
-  export type AsObject = {
-    clustername: string,
-    availablebeamtimesList: Array<string>,
-  }
-}
-
-export class ToplogyQuery extends jspb.Message {
-  getFromtimestamp(): number;
-  setFromtimestamp(value: number): ToplogyQuery;
-
-  getTotimestamp(): number;
-  setTotimestamp(value: number): ToplogyQuery;
-
-  getBeamtimefilter(): string;
-  setBeamtimefilter(value: string): ToplogyQuery;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): ToplogyQuery.AsObject;
-  static toObject(includeInstance: boolean, msg: ToplogyQuery): ToplogyQuery.AsObject;
-  static serializeBinaryToWriter(message: ToplogyQuery, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): ToplogyQuery;
-  static deserializeBinaryFromReader(message: ToplogyQuery, reader: jspb.BinaryReader): ToplogyQuery;
-}
-
-export namespace ToplogyQuery {
-  export type AsObject = {
-    fromtimestamp: number,
-    totimestamp: number,
-    beamtimefilter: string,
-  }
-}
-
-export class TopologyResponseNode extends jspb.Message {
-  getNodeid(): string;
-  setNodeid(value: string): TopologyResponseNode;
-
-  getLevel(): number;
-  setLevel(value: number): TopologyResponseNode;
-
-  getConsumerinstancesList(): Array<string>;
-  setConsumerinstancesList(value: Array<string>): TopologyResponseNode;
-  clearConsumerinstancesList(): TopologyResponseNode;
-  addConsumerinstances(value: string, index?: number): TopologyResponseNode;
-
-  getProducerinstancesList(): Array<string>;
-  setProducerinstancesList(value: Array<string>): TopologyResponseNode;
-  clearProducerinstancesList(): TopologyResponseNode;
-  addProducerinstances(value: string, index?: number): TopologyResponseNode;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): TopologyResponseNode.AsObject;
-  static toObject(includeInstance: boolean, msg: TopologyResponseNode): TopologyResponseNode.AsObject;
-  static serializeBinaryToWriter(message: TopologyResponseNode, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): TopologyResponseNode;
-  static deserializeBinaryFromReader(message: TopologyResponseNode, reader: jspb.BinaryReader): TopologyResponseNode;
-}
-
-export namespace TopologyResponseNode {
-  export type AsObject = {
-    nodeid: string,
-    level: number,
-    consumerinstancesList: Array<string>,
-    producerinstancesList: Array<string>,
-  }
-}
-
-export class TopologyResponseEdge extends jspb.Message {
-  getFromnodeid(): string;
-  setFromnodeid(value: string): TopologyResponseEdge;
-
-  getTonodeid(): string;
-  setTonodeid(value: string): TopologyResponseEdge;
-
-  getSourcename(): string;
-  setSourcename(value: string): TopologyResponseEdge;
-
-  getInvolvedreceiversList(): Array<string>;
-  setInvolvedreceiversList(value: Array<string>): TopologyResponseEdge;
-  clearInvolvedreceiversList(): TopologyResponseEdge;
-  addInvolvedreceivers(value: string, index?: number): TopologyResponseEdge;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): TopologyResponseEdge.AsObject;
-  static toObject(includeInstance: boolean, msg: TopologyResponseEdge): TopologyResponseEdge.AsObject;
-  static serializeBinaryToWriter(message: TopologyResponseEdge, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): TopologyResponseEdge;
-  static deserializeBinaryFromReader(message: TopologyResponseEdge, reader: jspb.BinaryReader): TopologyResponseEdge;
-}
-
-export namespace TopologyResponseEdge {
-  export type AsObject = {
-    fromnodeid: string,
-    tonodeid: string,
-    sourcename: string,
-    involvedreceiversList: Array<string>,
-  }
-}
-
-export class TopologyResponse extends jspb.Message {
-  getNodesList(): Array<TopologyResponseNode>;
-  setNodesList(value: Array<TopologyResponseNode>): TopologyResponse;
-  clearNodesList(): TopologyResponse;
-  addNodes(value?: TopologyResponseNode, index?: number): TopologyResponseNode;
-
-  getEdgesList(): Array<TopologyResponseEdge>;
-  setEdgesList(value: Array<TopologyResponseEdge>): TopologyResponse;
-  clearEdgesList(): TopologyResponse;
-  addEdges(value?: TopologyResponseEdge, index?: number): TopologyResponseEdge;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): TopologyResponse.AsObject;
-  static toObject(includeInstance: boolean, msg: TopologyResponse): TopologyResponse.AsObject;
-  static serializeBinaryToWriter(message: TopologyResponse, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): TopologyResponse;
-  static deserializeBinaryFromReader(message: TopologyResponse, reader: jspb.BinaryReader): TopologyResponse;
-}
-
-export namespace TopologyResponse {
-  export type AsObject = {
-    nodesList: Array<TopologyResponseNode.AsObject>,
-    edgesList: Array<TopologyResponseEdge.AsObject>,
-  }
-}
-
-export class GroupDelayQuery extends jspb.Message {
-  getFromtimestamp(): number;
-  setFromtimestamp(value: number): GroupDelayQuery;
-
-  getTotimestamp(): number;
-  setTotimestamp(value: number): GroupDelayQuery;
-
-  getBeamtimefilter(): string;
-  setBeamtimefilter(value: string): GroupDelayQuery;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): GroupDelayQuery.AsObject;
-  static toObject(includeInstance: boolean, msg: GroupDelayQuery): GroupDelayQuery.AsObject;
-  static serializeBinaryToWriter(message: GroupDelayQuery, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): GroupDelayQuery;
-  static deserializeBinaryFromReader(message: GroupDelayQuery, reader: jspb.BinaryReader): GroupDelayQuery;
-}
-
-export namespace GroupDelayQuery {
-  export type AsObject = {
-    fromtimestamp: number,
-    totimestamp: number,
-    beamtimefilter: string,
-  }
-}
-
-export class GroupDelayResponseItem extends jspb.Message {
-  getGroupid(): string;
-  setGroupid(value: string): GroupDelayResponseItem;
-
-  getDelayms(): number;
-  setDelayms(value: number): GroupDelayResponseItem;
-
-  getPipelinestep(): string;
-  setPipelinestep(value: string): GroupDelayResponseItem;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): GroupDelayResponseItem.AsObject;
-  static toObject(includeInstance: boolean, msg: GroupDelayResponseItem): GroupDelayResponseItem.AsObject;
-  static serializeBinaryToWriter(message: GroupDelayResponseItem, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): GroupDelayResponseItem;
-  static deserializeBinaryFromReader(message: GroupDelayResponseItem, reader: jspb.BinaryReader): GroupDelayResponseItem;
-}
-
-export namespace GroupDelayResponseItem {
-  export type AsObject = {
-    groupid: string,
-    delayms: number,
-    pipelinestep: string,
-  }
-}
-
-export class GroupDelayResponse extends jspb.Message {
-  getGroupidsList(): Array<GroupDelayResponseItem>;
-  setGroupidsList(value: Array<GroupDelayResponseItem>): GroupDelayResponse;
-  clearGroupidsList(): GroupDelayResponse;
-  addGroupids(value?: GroupDelayResponseItem, index?: number): GroupDelayResponseItem;
-
-  serializeBinary(): Uint8Array;
-  toObject(includeInstance?: boolean): GroupDelayResponse.AsObject;
-  static toObject(includeInstance: boolean, msg: GroupDelayResponse): GroupDelayResponse.AsObject;
-  static serializeBinaryToWriter(message: GroupDelayResponse, writer: jspb.BinaryWriter): void;
-  static deserializeBinary(bytes: Uint8Array): GroupDelayResponse;
-  static deserializeBinaryFromReader(message: GroupDelayResponse, reader: jspb.BinaryReader): GroupDelayResponse;
-}
-
-export namespace GroupDelayResponse {
-  export type AsObject = {
-    groupidsList: Array<GroupDelayResponseItem.AsObject>,
-  }
-}
-
-export enum PipelineConnectionQueryMode { 
-  INVALID_QUERY_MODE = 0,
-  EXACTPATH = 1,
-  JUSTRELATEDTOSTEP = 2,
-}
diff --git a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_pb.js b/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_pb.js
deleted file mode 100644
index 350bb433317743a3062a3a21a75bc056365ca041..0000000000000000000000000000000000000000
--- a/monitoring/monitoring_ui/src/generated_proto/AsapoMonitoringQueryService_pb.js
+++ /dev/null
@@ -1,3487 +0,0 @@
-// source: AsapoMonitoringQueryService.proto
-/**
- * @fileoverview
- * @enhanceable
- * @suppress {missingRequire} reports error on implicit type usages.
- * @suppress {messageConventions} JS Compiler reports an error if a variable or
- *     field starts with 'MSG_' and isn't a translatable message.
- * @public
- */
-// GENERATED CODE -- DO NOT EDIT!
-/* eslint-disable */
-// @ts-nocheck
-
-var jspb = require('google-protobuf');
-var goog = jspb;
-var global = Function('return this')();
-
-var AsapoMonitoringCommonService_pb = require('./AsapoMonitoringCommonService_pb.js');
-goog.object.extend(proto, AsapoMonitoringCommonService_pb);
-goog.exportSymbol('proto.DataPointsQuery', null, global);
-goog.exportSymbol('proto.DataPointsResponse', null, global);
-goog.exportSymbol('proto.GroupDelayQuery', null, global);
-goog.exportSymbol('proto.GroupDelayResponse', null, global);
-goog.exportSymbol('proto.GroupDelayResponseItem', null, global);
-goog.exportSymbol('proto.MetadataResponse', null, global);
-goog.exportSymbol('proto.PipelineConnectionQueryMode', null, global);
-goog.exportSymbol('proto.RdsMemoryUsageDataPoint', null, global);
-goog.exportSymbol('proto.TaskTimeDataPoint', null, global);
-goog.exportSymbol('proto.ToplogyQuery', null, global);
-goog.exportSymbol('proto.TopologyResponse', null, global);
-goog.exportSymbol('proto.TopologyResponseEdge', null, global);
-goog.exportSymbol('proto.TopologyResponseNode', null, global);
-goog.exportSymbol('proto.TotalFileRateDataPoint', null, global);
-goog.exportSymbol('proto.TotalTransferRateDataPoint', null, global);
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.DataPointsQuery = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.DataPointsQuery, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.DataPointsQuery.displayName = 'proto.DataPointsQuery';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.TotalTransferRateDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.TotalTransferRateDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.TotalTransferRateDataPoint.displayName = 'proto.TotalTransferRateDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.TotalFileRateDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.TotalFileRateDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.TotalFileRateDataPoint.displayName = 'proto.TotalFileRateDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.TaskTimeDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.TaskTimeDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.TaskTimeDataPoint.displayName = 'proto.TaskTimeDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.RdsMemoryUsageDataPoint = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.RdsMemoryUsageDataPoint, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.RdsMemoryUsageDataPoint.displayName = 'proto.RdsMemoryUsageDataPoint';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.DataPointsResponse = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.DataPointsResponse.repeatedFields_, null);
-};
-goog.inherits(proto.DataPointsResponse, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.DataPointsResponse.displayName = 'proto.DataPointsResponse';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.MetadataResponse = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.MetadataResponse.repeatedFields_, null);
-};
-goog.inherits(proto.MetadataResponse, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.MetadataResponse.displayName = 'proto.MetadataResponse';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.ToplogyQuery = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.ToplogyQuery, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.ToplogyQuery.displayName = 'proto.ToplogyQuery';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.TopologyResponseNode = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.TopologyResponseNode.repeatedFields_, null);
-};
-goog.inherits(proto.TopologyResponseNode, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.TopologyResponseNode.displayName = 'proto.TopologyResponseNode';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.TopologyResponseEdge = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.TopologyResponseEdge.repeatedFields_, null);
-};
-goog.inherits(proto.TopologyResponseEdge, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.TopologyResponseEdge.displayName = 'proto.TopologyResponseEdge';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.TopologyResponse = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.TopologyResponse.repeatedFields_, null);
-};
-goog.inherits(proto.TopologyResponse, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.TopologyResponse.displayName = 'proto.TopologyResponse';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.GroupDelayQuery = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.GroupDelayQuery, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.GroupDelayQuery.displayName = 'proto.GroupDelayQuery';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.GroupDelayResponseItem = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.GroupDelayResponseItem, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.GroupDelayResponseItem.displayName = 'proto.GroupDelayResponseItem';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.GroupDelayResponse = function(opt_data) {
-  jspb.Message.initialize(this, opt_data, 0, -1, proto.GroupDelayResponse.repeatedFields_, null);
-};
-goog.inherits(proto.GroupDelayResponse, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
-  /**
-   * @public
-   * @override
-   */
-  proto.GroupDelayResponse.displayName = 'proto.GroupDelayResponse';
-}
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.DataPointsQuery.prototype.toObject = function(opt_includeInstance) {
-  return proto.DataPointsQuery.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.DataPointsQuery} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.DataPointsQuery.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    fromtimestamp: jspb.Message.getFieldWithDefault(msg, 1, 0),
-    totimestamp: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    beamtimefilter: jspb.Message.getFieldWithDefault(msg, 4, ""),
-    sourcefilter: jspb.Message.getFieldWithDefault(msg, 5, ""),
-    receiverfilter: jspb.Message.getFieldWithDefault(msg, 6, ""),
-    frompipelinestepfilter: jspb.Message.getFieldWithDefault(msg, 7, ""),
-    topipelinestepfilter: jspb.Message.getFieldWithDefault(msg, 8, ""),
-    pipelinequerymode: jspb.Message.getFieldWithDefault(msg, 9, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.DataPointsQuery}
- */
-proto.DataPointsQuery.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.DataPointsQuery;
-  return proto.DataPointsQuery.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.DataPointsQuery} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.DataPointsQuery}
- */
-proto.DataPointsQuery.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setFromtimestamp(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotimestamp(value);
-      break;
-    case 4:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBeamtimefilter(value);
-      break;
-    case 5:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setSourcefilter(value);
-      break;
-    case 6:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setReceiverfilter(value);
-      break;
-    case 7:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setFrompipelinestepfilter(value);
-      break;
-    case 8:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setTopipelinestepfilter(value);
-      break;
-    case 9:
-      var value = /** @type {!proto.PipelineConnectionQueryMode} */ (reader.readEnum());
-      msg.setPipelinequerymode(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.DataPointsQuery.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.DataPointsQuery.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.DataPointsQuery} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.DataPointsQuery.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getFromtimestamp();
-  if (f !== 0) {
-    writer.writeUint64(
-      1,
-      f
-    );
-  }
-  f = message.getTotimestamp();
-  if (f !== 0) {
-    writer.writeUint64(
-      2,
-      f
-    );
-  }
-  f = message.getBeamtimefilter();
-  if (f.length > 0) {
-    writer.writeString(
-      4,
-      f
-    );
-  }
-  f = message.getSourcefilter();
-  if (f.length > 0) {
-    writer.writeString(
-      5,
-      f
-    );
-  }
-  f = message.getReceiverfilter();
-  if (f.length > 0) {
-    writer.writeString(
-      6,
-      f
-    );
-  }
-  f = message.getFrompipelinestepfilter();
-  if (f.length > 0) {
-    writer.writeString(
-      7,
-      f
-    );
-  }
-  f = message.getTopipelinestepfilter();
-  if (f.length > 0) {
-    writer.writeString(
-      8,
-      f
-    );
-  }
-  f = message.getPipelinequerymode();
-  if (f !== 0.0) {
-    writer.writeEnum(
-      9,
-      f
-    );
-  }
-};
-
-
-/**
- * optional uint64 fromTimestamp = 1;
- * @return {number}
- */
-proto.DataPointsQuery.prototype.getFromtimestamp = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.DataPointsQuery} returns this
- */
-proto.DataPointsQuery.prototype.setFromtimestamp = function(value) {
-  return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-/**
- * optional uint64 toTimestamp = 2;
- * @return {number}
- */
-proto.DataPointsQuery.prototype.getTotimestamp = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.DataPointsQuery} returns this
- */
-proto.DataPointsQuery.prototype.setTotimestamp = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional string beamtimeFilter = 4;
- * @return {string}
- */
-proto.DataPointsQuery.prototype.getBeamtimefilter = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.DataPointsQuery} returns this
- */
-proto.DataPointsQuery.prototype.setBeamtimefilter = function(value) {
-  return jspb.Message.setProto3StringField(this, 4, value);
-};
-
-
-/**
- * optional string sourceFilter = 5;
- * @return {string}
- */
-proto.DataPointsQuery.prototype.getSourcefilter = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.DataPointsQuery} returns this
- */
-proto.DataPointsQuery.prototype.setSourcefilter = function(value) {
-  return jspb.Message.setProto3StringField(this, 5, value);
-};
-
-
-/**
- * optional string receiverFilter = 6;
- * @return {string}
- */
-proto.DataPointsQuery.prototype.getReceiverfilter = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.DataPointsQuery} returns this
- */
-proto.DataPointsQuery.prototype.setReceiverfilter = function(value) {
-  return jspb.Message.setProto3StringField(this, 6, value);
-};
-
-
-/**
- * optional string fromPipelineStepFilter = 7;
- * @return {string}
- */
-proto.DataPointsQuery.prototype.getFrompipelinestepfilter = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.DataPointsQuery} returns this
- */
-proto.DataPointsQuery.prototype.setFrompipelinestepfilter = function(value) {
-  return jspb.Message.setProto3StringField(this, 7, value);
-};
-
-
-/**
- * optional string toPipelineStepFilter = 8;
- * @return {string}
- */
-proto.DataPointsQuery.prototype.getTopipelinestepfilter = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.DataPointsQuery} returns this
- */
-proto.DataPointsQuery.prototype.setTopipelinestepfilter = function(value) {
-  return jspb.Message.setProto3StringField(this, 8, value);
-};
-
-
-/**
- * optional PipelineConnectionQueryMode pipelineQueryMode = 9;
- * @return {!proto.PipelineConnectionQueryMode}
- */
-proto.DataPointsQuery.prototype.getPipelinequerymode = function() {
-  return /** @type {!proto.PipelineConnectionQueryMode} */ (jspb.Message.getFieldWithDefault(this, 9, 0));
-};
-
-
-/**
- * @param {!proto.PipelineConnectionQueryMode} value
- * @return {!proto.DataPointsQuery} returns this
- */
-proto.DataPointsQuery.prototype.setPipelinequerymode = function(value) {
-  return jspb.Message.setProto3EnumField(this, 9, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.TotalTransferRateDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.TotalTransferRateDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.TotalTransferRateDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TotalTransferRateDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    totalbytespersecrecv: jspb.Message.getFieldWithDefault(msg, 1, 0),
-    totalbytespersecsend: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    totalbytespersecrdssend: jspb.Message.getFieldWithDefault(msg, 3, 0),
-    totalbytespersecftssend: jspb.Message.getFieldWithDefault(msg, 4, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.TotalTransferRateDataPoint}
- */
-proto.TotalTransferRateDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.TotalTransferRateDataPoint;
-  return proto.TotalTransferRateDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.TotalTransferRateDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.TotalTransferRateDataPoint}
- */
-proto.TotalTransferRateDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalbytespersecrecv(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalbytespersecsend(value);
-      break;
-    case 3:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalbytespersecrdssend(value);
-      break;
-    case 4:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalbytespersecftssend(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.TotalTransferRateDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.TotalTransferRateDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.TotalTransferRateDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TotalTransferRateDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getTotalbytespersecrecv();
-  if (f !== 0) {
-    writer.writeUint64(
-      1,
-      f
-    );
-  }
-  f = message.getTotalbytespersecsend();
-  if (f !== 0) {
-    writer.writeUint64(
-      2,
-      f
-    );
-  }
-  f = message.getTotalbytespersecrdssend();
-  if (f !== 0) {
-    writer.writeUint64(
-      3,
-      f
-    );
-  }
-  f = message.getTotalbytespersecftssend();
-  if (f !== 0) {
-    writer.writeUint64(
-      4,
-      f
-    );
-  }
-};
-
-
-/**
- * optional uint64 totalBytesPerSecRecv = 1;
- * @return {number}
- */
-proto.TotalTransferRateDataPoint.prototype.getTotalbytespersecrecv = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TotalTransferRateDataPoint} returns this
- */
-proto.TotalTransferRateDataPoint.prototype.setTotalbytespersecrecv = function(value) {
-  return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-/**
- * optional uint64 totalBytesPerSecSend = 2;
- * @return {number}
- */
-proto.TotalTransferRateDataPoint.prototype.getTotalbytespersecsend = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TotalTransferRateDataPoint} returns this
- */
-proto.TotalTransferRateDataPoint.prototype.setTotalbytespersecsend = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional uint64 totalBytesPerSecRdsSend = 3;
- * @return {number}
- */
-proto.TotalTransferRateDataPoint.prototype.getTotalbytespersecrdssend = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TotalTransferRateDataPoint} returns this
- */
-proto.TotalTransferRateDataPoint.prototype.setTotalbytespersecrdssend = function(value) {
-  return jspb.Message.setProto3IntField(this, 3, value);
-};
-
-
-/**
- * optional uint64 totalBytesPerSecFtsSend = 4;
- * @return {number}
- */
-proto.TotalTransferRateDataPoint.prototype.getTotalbytespersecftssend = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TotalTransferRateDataPoint} returns this
- */
-proto.TotalTransferRateDataPoint.prototype.setTotalbytespersecftssend = function(value) {
-  return jspb.Message.setProto3IntField(this, 4, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.TotalFileRateDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.TotalFileRateDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.TotalFileRateDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TotalFileRateDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    totalrequests: jspb.Message.getFieldWithDefault(msg, 1, 0),
-    cachemisses: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    fromcache: jspb.Message.getFieldWithDefault(msg, 3, 0),
-    fromdisk: jspb.Message.getFieldWithDefault(msg, 4, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.TotalFileRateDataPoint}
- */
-proto.TotalFileRateDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.TotalFileRateDataPoint;
-  return proto.TotalFileRateDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.TotalFileRateDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.TotalFileRateDataPoint}
- */
-proto.TotalFileRateDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setTotalrequests(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setCachemisses(value);
-      break;
-    case 3:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setFromcache(value);
-      break;
-    case 4:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setFromdisk(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.TotalFileRateDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.TotalFileRateDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.TotalFileRateDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TotalFileRateDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getTotalrequests();
-  if (f !== 0) {
-    writer.writeUint32(
-      1,
-      f
-    );
-  }
-  f = message.getCachemisses();
-  if (f !== 0) {
-    writer.writeUint32(
-      2,
-      f
-    );
-  }
-  f = message.getFromcache();
-  if (f !== 0) {
-    writer.writeUint32(
-      3,
-      f
-    );
-  }
-  f = message.getFromdisk();
-  if (f !== 0) {
-    writer.writeUint32(
-      4,
-      f
-    );
-  }
-};
-
-
-/**
- * optional uint32 totalRequests = 1;
- * @return {number}
- */
-proto.TotalFileRateDataPoint.prototype.getTotalrequests = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TotalFileRateDataPoint} returns this
- */
-proto.TotalFileRateDataPoint.prototype.setTotalrequests = function(value) {
-  return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-/**
- * optional uint32 cacheMisses = 2;
- * @return {number}
- */
-proto.TotalFileRateDataPoint.prototype.getCachemisses = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TotalFileRateDataPoint} returns this
- */
-proto.TotalFileRateDataPoint.prototype.setCachemisses = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional uint32 fromCache = 3;
- * @return {number}
- */
-proto.TotalFileRateDataPoint.prototype.getFromcache = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TotalFileRateDataPoint} returns this
- */
-proto.TotalFileRateDataPoint.prototype.setFromcache = function(value) {
-  return jspb.Message.setProto3IntField(this, 3, value);
-};
-
-
-/**
- * optional uint32 fromDisk = 4;
- * @return {number}
- */
-proto.TotalFileRateDataPoint.prototype.getFromdisk = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TotalFileRateDataPoint} returns this
- */
-proto.TotalFileRateDataPoint.prototype.setFromdisk = function(value) {
-  return jspb.Message.setProto3IntField(this, 4, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.TaskTimeDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.TaskTimeDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.TaskTimeDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TaskTimeDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    receiveiotimeus: jspb.Message.getFieldWithDefault(msg, 1, 0),
-    writetodisktimeus: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    writetodatabasetimeus: jspb.Message.getFieldWithDefault(msg, 3, 0),
-    rdssendtoconsumertimeus: jspb.Message.getFieldWithDefault(msg, 4, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.TaskTimeDataPoint}
- */
-proto.TaskTimeDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.TaskTimeDataPoint;
-  return proto.TaskTimeDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.TaskTimeDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.TaskTimeDataPoint}
- */
-proto.TaskTimeDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setReceiveiotimeus(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setWritetodisktimeus(value);
-      break;
-    case 3:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setWritetodatabasetimeus(value);
-      break;
-    case 4:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setRdssendtoconsumertimeus(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.TaskTimeDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.TaskTimeDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.TaskTimeDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TaskTimeDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getReceiveiotimeus();
-  if (f !== 0) {
-    writer.writeUint32(
-      1,
-      f
-    );
-  }
-  f = message.getWritetodisktimeus();
-  if (f !== 0) {
-    writer.writeUint32(
-      2,
-      f
-    );
-  }
-  f = message.getWritetodatabasetimeus();
-  if (f !== 0) {
-    writer.writeUint32(
-      3,
-      f
-    );
-  }
-  f = message.getRdssendtoconsumertimeus();
-  if (f !== 0) {
-    writer.writeUint32(
-      4,
-      f
-    );
-  }
-};
-
-
-/**
- * optional uint32 receiveIoTimeUs = 1;
- * @return {number}
- */
-proto.TaskTimeDataPoint.prototype.getReceiveiotimeus = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TaskTimeDataPoint} returns this
- */
-proto.TaskTimeDataPoint.prototype.setReceiveiotimeus = function(value) {
-  return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-/**
- * optional uint32 writeToDiskTimeUs = 2;
- * @return {number}
- */
-proto.TaskTimeDataPoint.prototype.getWritetodisktimeus = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TaskTimeDataPoint} returns this
- */
-proto.TaskTimeDataPoint.prototype.setWritetodisktimeus = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional uint32 writeToDatabaseTimeUs = 3;
- * @return {number}
- */
-proto.TaskTimeDataPoint.prototype.getWritetodatabasetimeus = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TaskTimeDataPoint} returns this
- */
-proto.TaskTimeDataPoint.prototype.setWritetodatabasetimeus = function(value) {
-  return jspb.Message.setProto3IntField(this, 3, value);
-};
-
-
-/**
- * optional uint32 rdsSendToConsumerTimeUs = 4;
- * @return {number}
- */
-proto.TaskTimeDataPoint.prototype.getRdssendtoconsumertimeus = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TaskTimeDataPoint} returns this
- */
-proto.TaskTimeDataPoint.prototype.setRdssendtoconsumertimeus = function(value) {
-  return jspb.Message.setProto3IntField(this, 4, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.RdsMemoryUsageDataPoint.prototype.toObject = function(opt_includeInstance) {
-  return proto.RdsMemoryUsageDataPoint.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.RdsMemoryUsageDataPoint} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.RdsMemoryUsageDataPoint.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    totalusedmemory: jspb.Message.getFieldWithDefault(msg, 1, 0)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.RdsMemoryUsageDataPoint}
- */
-proto.RdsMemoryUsageDataPoint.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.RdsMemoryUsageDataPoint;
-  return proto.RdsMemoryUsageDataPoint.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.RdsMemoryUsageDataPoint} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.RdsMemoryUsageDataPoint}
- */
-proto.RdsMemoryUsageDataPoint.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotalusedmemory(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.RdsMemoryUsageDataPoint.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.RdsMemoryUsageDataPoint.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.RdsMemoryUsageDataPoint} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.RdsMemoryUsageDataPoint.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getTotalusedmemory();
-  if (f !== 0) {
-    writer.writeUint64(
-      1,
-      f
-    );
-  }
-};
-
-
-/**
- * optional uint64 totalUsedMemory = 1;
- * @return {number}
- */
-proto.RdsMemoryUsageDataPoint.prototype.getTotalusedmemory = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.RdsMemoryUsageDataPoint} returns this
- */
-proto.RdsMemoryUsageDataPoint.prototype.setTotalusedmemory = function(value) {
-  return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.DataPointsResponse.repeatedFields_ = [3,4,5,6];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.DataPointsResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.DataPointsResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.DataPointsResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.DataPointsResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    starttimestampinsec: jspb.Message.getFieldWithDefault(msg, 1, 0),
-    timeintervalinsec: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    transferratesList: jspb.Message.toObjectList(msg.getTransferratesList(),
-    proto.TotalTransferRateDataPoint.toObject, includeInstance),
-    fileratesList: jspb.Message.toObjectList(msg.getFileratesList(),
-    proto.TotalFileRateDataPoint.toObject, includeInstance),
-    tasktimesList: jspb.Message.toObjectList(msg.getTasktimesList(),
-    proto.TaskTimeDataPoint.toObject, includeInstance),
-    memoryusagesList: jspb.Message.toObjectList(msg.getMemoryusagesList(),
-    proto.RdsMemoryUsageDataPoint.toObject, includeInstance)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.DataPointsResponse}
- */
-proto.DataPointsResponse.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.DataPointsResponse;
-  return proto.DataPointsResponse.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.DataPointsResponse} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.DataPointsResponse}
- */
-proto.DataPointsResponse.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setStarttimestampinsec(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setTimeintervalinsec(value);
-      break;
-    case 3:
-      var value = new proto.TotalTransferRateDataPoint;
-      reader.readMessage(value,proto.TotalTransferRateDataPoint.deserializeBinaryFromReader);
-      msg.addTransferrates(value);
-      break;
-    case 4:
-      var value = new proto.TotalFileRateDataPoint;
-      reader.readMessage(value,proto.TotalFileRateDataPoint.deserializeBinaryFromReader);
-      msg.addFilerates(value);
-      break;
-    case 5:
-      var value = new proto.TaskTimeDataPoint;
-      reader.readMessage(value,proto.TaskTimeDataPoint.deserializeBinaryFromReader);
-      msg.addTasktimes(value);
-      break;
-    case 6:
-      var value = new proto.RdsMemoryUsageDataPoint;
-      reader.readMessage(value,proto.RdsMemoryUsageDataPoint.deserializeBinaryFromReader);
-      msg.addMemoryusages(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.DataPointsResponse.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.DataPointsResponse.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.DataPointsResponse} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.DataPointsResponse.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getStarttimestampinsec();
-  if (f !== 0) {
-    writer.writeUint64(
-      1,
-      f
-    );
-  }
-  f = message.getTimeintervalinsec();
-  if (f !== 0) {
-    writer.writeUint32(
-      2,
-      f
-    );
-  }
-  f = message.getTransferratesList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      3,
-      f,
-      proto.TotalTransferRateDataPoint.serializeBinaryToWriter
-    );
-  }
-  f = message.getFileratesList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      4,
-      f,
-      proto.TotalFileRateDataPoint.serializeBinaryToWriter
-    );
-  }
-  f = message.getTasktimesList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      5,
-      f,
-      proto.TaskTimeDataPoint.serializeBinaryToWriter
-    );
-  }
-  f = message.getMemoryusagesList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      6,
-      f,
-      proto.RdsMemoryUsageDataPoint.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * optional uint64 startTimestampInSec = 1;
- * @return {number}
- */
-proto.DataPointsResponse.prototype.getStarttimestampinsec = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.DataPointsResponse} returns this
- */
-proto.DataPointsResponse.prototype.setStarttimestampinsec = function(value) {
-  return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-/**
- * optional uint32 timeIntervalInSec = 2;
- * @return {number}
- */
-proto.DataPointsResponse.prototype.getTimeintervalinsec = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.DataPointsResponse} returns this
- */
-proto.DataPointsResponse.prototype.setTimeintervalinsec = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * repeated TotalTransferRateDataPoint transferRates = 3;
- * @return {!Array<!proto.TotalTransferRateDataPoint>}
- */
-proto.DataPointsResponse.prototype.getTransferratesList = function() {
-  return /** @type{!Array<!proto.TotalTransferRateDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.TotalTransferRateDataPoint, 3));
-};
-
-
-/**
- * @param {!Array<!proto.TotalTransferRateDataPoint>} value
- * @return {!proto.DataPointsResponse} returns this
-*/
-proto.DataPointsResponse.prototype.setTransferratesList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 3, value);
-};
-
-
-/**
- * @param {!proto.TotalTransferRateDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.TotalTransferRateDataPoint}
- */
-proto.DataPointsResponse.prototype.addTransferrates = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.TotalTransferRateDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.DataPointsResponse} returns this
- */
-proto.DataPointsResponse.prototype.clearTransferratesList = function() {
-  return this.setTransferratesList([]);
-};
-
-
-/**
- * repeated TotalFileRateDataPoint fileRates = 4;
- * @return {!Array<!proto.TotalFileRateDataPoint>}
- */
-proto.DataPointsResponse.prototype.getFileratesList = function() {
-  return /** @type{!Array<!proto.TotalFileRateDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.TotalFileRateDataPoint, 4));
-};
-
-
-/**
- * @param {!Array<!proto.TotalFileRateDataPoint>} value
- * @return {!proto.DataPointsResponse} returns this
-*/
-proto.DataPointsResponse.prototype.setFileratesList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 4, value);
-};
-
-
-/**
- * @param {!proto.TotalFileRateDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.TotalFileRateDataPoint}
- */
-proto.DataPointsResponse.prototype.addFilerates = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.TotalFileRateDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.DataPointsResponse} returns this
- */
-proto.DataPointsResponse.prototype.clearFileratesList = function() {
-  return this.setFileratesList([]);
-};
-
-
-/**
- * repeated TaskTimeDataPoint taskTimes = 5;
- * @return {!Array<!proto.TaskTimeDataPoint>}
- */
-proto.DataPointsResponse.prototype.getTasktimesList = function() {
-  return /** @type{!Array<!proto.TaskTimeDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.TaskTimeDataPoint, 5));
-};
-
-
-/**
- * @param {!Array<!proto.TaskTimeDataPoint>} value
- * @return {!proto.DataPointsResponse} returns this
-*/
-proto.DataPointsResponse.prototype.setTasktimesList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 5, value);
-};
-
-
-/**
- * @param {!proto.TaskTimeDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.TaskTimeDataPoint}
- */
-proto.DataPointsResponse.prototype.addTasktimes = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 5, opt_value, proto.TaskTimeDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.DataPointsResponse} returns this
- */
-proto.DataPointsResponse.prototype.clearTasktimesList = function() {
-  return this.setTasktimesList([]);
-};
-
-
-/**
- * repeated RdsMemoryUsageDataPoint memoryUsages = 6;
- * @return {!Array<!proto.RdsMemoryUsageDataPoint>}
- */
-proto.DataPointsResponse.prototype.getMemoryusagesList = function() {
-  return /** @type{!Array<!proto.RdsMemoryUsageDataPoint>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.RdsMemoryUsageDataPoint, 6));
-};
-
-
-/**
- * @param {!Array<!proto.RdsMemoryUsageDataPoint>} value
- * @return {!proto.DataPointsResponse} returns this
-*/
-proto.DataPointsResponse.prototype.setMemoryusagesList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 6, value);
-};
-
-
-/**
- * @param {!proto.RdsMemoryUsageDataPoint=} opt_value
- * @param {number=} opt_index
- * @return {!proto.RdsMemoryUsageDataPoint}
- */
-proto.DataPointsResponse.prototype.addMemoryusages = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 6, opt_value, proto.RdsMemoryUsageDataPoint, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.DataPointsResponse} returns this
- */
-proto.DataPointsResponse.prototype.clearMemoryusagesList = function() {
-  return this.setMemoryusagesList([]);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.MetadataResponse.repeatedFields_ = [2];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.MetadataResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.MetadataResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.MetadataResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.MetadataResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    clustername: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    availablebeamtimesList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.MetadataResponse}
- */
-proto.MetadataResponse.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.MetadataResponse;
-  return proto.MetadataResponse.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.MetadataResponse} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.MetadataResponse}
- */
-proto.MetadataResponse.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setClustername(value);
-      break;
-    case 2:
-      var value = /** @type {string} */ (reader.readString());
-      msg.addAvailablebeamtimes(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.MetadataResponse.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.MetadataResponse.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.MetadataResponse} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.MetadataResponse.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getClustername();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getAvailablebeamtimesList();
-  if (f.length > 0) {
-    writer.writeRepeatedString(
-      2,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string clusterName = 1;
- * @return {string}
- */
-proto.MetadataResponse.prototype.getClustername = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.MetadataResponse} returns this
- */
-proto.MetadataResponse.prototype.setClustername = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * repeated string availableBeamtimes = 2;
- * @return {!Array<string>}
- */
-proto.MetadataResponse.prototype.getAvailablebeamtimesList = function() {
-  return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 2));
-};
-
-
-/**
- * @param {!Array<string>} value
- * @return {!proto.MetadataResponse} returns this
- */
-proto.MetadataResponse.prototype.setAvailablebeamtimesList = function(value) {
-  return jspb.Message.setField(this, 2, value || []);
-};
-
-
-/**
- * @param {string} value
- * @param {number=} opt_index
- * @return {!proto.MetadataResponse} returns this
- */
-proto.MetadataResponse.prototype.addAvailablebeamtimes = function(value, opt_index) {
-  return jspb.Message.addToRepeatedField(this, 2, value, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.MetadataResponse} returns this
- */
-proto.MetadataResponse.prototype.clearAvailablebeamtimesList = function() {
-  return this.setAvailablebeamtimesList([]);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.ToplogyQuery.prototype.toObject = function(opt_includeInstance) {
-  return proto.ToplogyQuery.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.ToplogyQuery} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.ToplogyQuery.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    fromtimestamp: jspb.Message.getFieldWithDefault(msg, 1, 0),
-    totimestamp: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    beamtimefilter: jspb.Message.getFieldWithDefault(msg, 3, "")
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.ToplogyQuery}
- */
-proto.ToplogyQuery.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.ToplogyQuery;
-  return proto.ToplogyQuery.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.ToplogyQuery} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.ToplogyQuery}
- */
-proto.ToplogyQuery.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setFromtimestamp(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotimestamp(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBeamtimefilter(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.ToplogyQuery.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.ToplogyQuery.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.ToplogyQuery} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.ToplogyQuery.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getFromtimestamp();
-  if (f !== 0) {
-    writer.writeUint64(
-      1,
-      f
-    );
-  }
-  f = message.getTotimestamp();
-  if (f !== 0) {
-    writer.writeUint64(
-      2,
-      f
-    );
-  }
-  f = message.getBeamtimefilter();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-};
-
-
-/**
- * optional uint64 fromTimestamp = 1;
- * @return {number}
- */
-proto.ToplogyQuery.prototype.getFromtimestamp = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.ToplogyQuery} returns this
- */
-proto.ToplogyQuery.prototype.setFromtimestamp = function(value) {
-  return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-/**
- * optional uint64 toTimestamp = 2;
- * @return {number}
- */
-proto.ToplogyQuery.prototype.getTotimestamp = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.ToplogyQuery} returns this
- */
-proto.ToplogyQuery.prototype.setTotimestamp = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional string beamtimeFilter = 3;
- * @return {string}
- */
-proto.ToplogyQuery.prototype.getBeamtimefilter = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.ToplogyQuery} returns this
- */
-proto.ToplogyQuery.prototype.setBeamtimefilter = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.TopologyResponseNode.repeatedFields_ = [3,4];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.TopologyResponseNode.prototype.toObject = function(opt_includeInstance) {
-  return proto.TopologyResponseNode.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.TopologyResponseNode} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TopologyResponseNode.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    nodeid: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    level: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    consumerinstancesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
-    producerinstancesList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.TopologyResponseNode}
- */
-proto.TopologyResponseNode.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.TopologyResponseNode;
-  return proto.TopologyResponseNode.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.TopologyResponseNode} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.TopologyResponseNode}
- */
-proto.TopologyResponseNode.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setNodeid(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setLevel(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.addConsumerinstances(value);
-      break;
-    case 4:
-      var value = /** @type {string} */ (reader.readString());
-      msg.addProducerinstances(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.TopologyResponseNode.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.TopologyResponseNode.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.TopologyResponseNode} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TopologyResponseNode.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getNodeid();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getLevel();
-  if (f !== 0) {
-    writer.writeUint32(
-      2,
-      f
-    );
-  }
-  f = message.getConsumerinstancesList();
-  if (f.length > 0) {
-    writer.writeRepeatedString(
-      3,
-      f
-    );
-  }
-  f = message.getProducerinstancesList();
-  if (f.length > 0) {
-    writer.writeRepeatedString(
-      4,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string nodeId = 1;
- * @return {string}
- */
-proto.TopologyResponseNode.prototype.getNodeid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.TopologyResponseNode} returns this
- */
-proto.TopologyResponseNode.prototype.setNodeid = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional uint32 level = 2;
- * @return {number}
- */
-proto.TopologyResponseNode.prototype.getLevel = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.TopologyResponseNode} returns this
- */
-proto.TopologyResponseNode.prototype.setLevel = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * repeated string consumerInstances = 3;
- * @return {!Array<string>}
- */
-proto.TopologyResponseNode.prototype.getConsumerinstancesList = function() {
-  return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 3));
-};
-
-
-/**
- * @param {!Array<string>} value
- * @return {!proto.TopologyResponseNode} returns this
- */
-proto.TopologyResponseNode.prototype.setConsumerinstancesList = function(value) {
-  return jspb.Message.setField(this, 3, value || []);
-};
-
-
-/**
- * @param {string} value
- * @param {number=} opt_index
- * @return {!proto.TopologyResponseNode} returns this
- */
-proto.TopologyResponseNode.prototype.addConsumerinstances = function(value, opt_index) {
-  return jspb.Message.addToRepeatedField(this, 3, value, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.TopologyResponseNode} returns this
- */
-proto.TopologyResponseNode.prototype.clearConsumerinstancesList = function() {
-  return this.setConsumerinstancesList([]);
-};
-
-
-/**
- * repeated string producerInstances = 4;
- * @return {!Array<string>}
- */
-proto.TopologyResponseNode.prototype.getProducerinstancesList = function() {
-  return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 4));
-};
-
-
-/**
- * @param {!Array<string>} value
- * @return {!proto.TopologyResponseNode} returns this
- */
-proto.TopologyResponseNode.prototype.setProducerinstancesList = function(value) {
-  return jspb.Message.setField(this, 4, value || []);
-};
-
-
-/**
- * @param {string} value
- * @param {number=} opt_index
- * @return {!proto.TopologyResponseNode} returns this
- */
-proto.TopologyResponseNode.prototype.addProducerinstances = function(value, opt_index) {
-  return jspb.Message.addToRepeatedField(this, 4, value, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.TopologyResponseNode} returns this
- */
-proto.TopologyResponseNode.prototype.clearProducerinstancesList = function() {
-  return this.setProducerinstancesList([]);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.TopologyResponseEdge.repeatedFields_ = [4];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.TopologyResponseEdge.prototype.toObject = function(opt_includeInstance) {
-  return proto.TopologyResponseEdge.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.TopologyResponseEdge} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TopologyResponseEdge.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    fromnodeid: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    tonodeid: jspb.Message.getFieldWithDefault(msg, 2, ""),
-    sourcename: jspb.Message.getFieldWithDefault(msg, 3, ""),
-    involvedreceiversList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.TopologyResponseEdge}
- */
-proto.TopologyResponseEdge.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.TopologyResponseEdge;
-  return proto.TopologyResponseEdge.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.TopologyResponseEdge} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.TopologyResponseEdge}
- */
-proto.TopologyResponseEdge.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setFromnodeid(value);
-      break;
-    case 2:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setTonodeid(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setSourcename(value);
-      break;
-    case 4:
-      var value = /** @type {string} */ (reader.readString());
-      msg.addInvolvedreceivers(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.TopologyResponseEdge.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.TopologyResponseEdge.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.TopologyResponseEdge} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TopologyResponseEdge.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getFromnodeid();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getTonodeid();
-  if (f.length > 0) {
-    writer.writeString(
-      2,
-      f
-    );
-  }
-  f = message.getSourcename();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-  f = message.getInvolvedreceiversList();
-  if (f.length > 0) {
-    writer.writeRepeatedString(
-      4,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string fromNodeId = 1;
- * @return {string}
- */
-proto.TopologyResponseEdge.prototype.getFromnodeid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.TopologyResponseEdge} returns this
- */
-proto.TopologyResponseEdge.prototype.setFromnodeid = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional string toNodeId = 2;
- * @return {string}
- */
-proto.TopologyResponseEdge.prototype.getTonodeid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.TopologyResponseEdge} returns this
- */
-proto.TopologyResponseEdge.prototype.setTonodeid = function(value) {
-  return jspb.Message.setProto3StringField(this, 2, value);
-};
-
-
-/**
- * optional string sourceName = 3;
- * @return {string}
- */
-proto.TopologyResponseEdge.prototype.getSourcename = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.TopologyResponseEdge} returns this
- */
-proto.TopologyResponseEdge.prototype.setSourcename = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-/**
- * repeated string involvedReceivers = 4;
- * @return {!Array<string>}
- */
-proto.TopologyResponseEdge.prototype.getInvolvedreceiversList = function() {
-  return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 4));
-};
-
-
-/**
- * @param {!Array<string>} value
- * @return {!proto.TopologyResponseEdge} returns this
- */
-proto.TopologyResponseEdge.prototype.setInvolvedreceiversList = function(value) {
-  return jspb.Message.setField(this, 4, value || []);
-};
-
-
-/**
- * @param {string} value
- * @param {number=} opt_index
- * @return {!proto.TopologyResponseEdge} returns this
- */
-proto.TopologyResponseEdge.prototype.addInvolvedreceivers = function(value, opt_index) {
-  return jspb.Message.addToRepeatedField(this, 4, value, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.TopologyResponseEdge} returns this
- */
-proto.TopologyResponseEdge.prototype.clearInvolvedreceiversList = function() {
-  return this.setInvolvedreceiversList([]);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.TopologyResponse.repeatedFields_ = [1,2];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.TopologyResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.TopologyResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.TopologyResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TopologyResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    nodesList: jspb.Message.toObjectList(msg.getNodesList(),
-    proto.TopologyResponseNode.toObject, includeInstance),
-    edgesList: jspb.Message.toObjectList(msg.getEdgesList(),
-    proto.TopologyResponseEdge.toObject, includeInstance)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.TopologyResponse}
- */
-proto.TopologyResponse.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.TopologyResponse;
-  return proto.TopologyResponse.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.TopologyResponse} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.TopologyResponse}
- */
-proto.TopologyResponse.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = new proto.TopologyResponseNode;
-      reader.readMessage(value,proto.TopologyResponseNode.deserializeBinaryFromReader);
-      msg.addNodes(value);
-      break;
-    case 2:
-      var value = new proto.TopologyResponseEdge;
-      reader.readMessage(value,proto.TopologyResponseEdge.deserializeBinaryFromReader);
-      msg.addEdges(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.TopologyResponse.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.TopologyResponse.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.TopologyResponse} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.TopologyResponse.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getNodesList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      1,
-      f,
-      proto.TopologyResponseNode.serializeBinaryToWriter
-    );
-  }
-  f = message.getEdgesList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      2,
-      f,
-      proto.TopologyResponseEdge.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * repeated TopologyResponseNode nodes = 1;
- * @return {!Array<!proto.TopologyResponseNode>}
- */
-proto.TopologyResponse.prototype.getNodesList = function() {
-  return /** @type{!Array<!proto.TopologyResponseNode>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.TopologyResponseNode, 1));
-};
-
-
-/**
- * @param {!Array<!proto.TopologyResponseNode>} value
- * @return {!proto.TopologyResponse} returns this
-*/
-proto.TopologyResponse.prototype.setNodesList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 1, value);
-};
-
-
-/**
- * @param {!proto.TopologyResponseNode=} opt_value
- * @param {number=} opt_index
- * @return {!proto.TopologyResponseNode}
- */
-proto.TopologyResponse.prototype.addNodes = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.TopologyResponseNode, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.TopologyResponse} returns this
- */
-proto.TopologyResponse.prototype.clearNodesList = function() {
-  return this.setNodesList([]);
-};
-
-
-/**
- * repeated TopologyResponseEdge edges = 2;
- * @return {!Array<!proto.TopologyResponseEdge>}
- */
-proto.TopologyResponse.prototype.getEdgesList = function() {
-  return /** @type{!Array<!proto.TopologyResponseEdge>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.TopologyResponseEdge, 2));
-};
-
-
-/**
- * @param {!Array<!proto.TopologyResponseEdge>} value
- * @return {!proto.TopologyResponse} returns this
-*/
-proto.TopologyResponse.prototype.setEdgesList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 2, value);
-};
-
-
-/**
- * @param {!proto.TopologyResponseEdge=} opt_value
- * @param {number=} opt_index
- * @return {!proto.TopologyResponseEdge}
- */
-proto.TopologyResponse.prototype.addEdges = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.TopologyResponseEdge, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.TopologyResponse} returns this
- */
-proto.TopologyResponse.prototype.clearEdgesList = function() {
-  return this.setEdgesList([]);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.GroupDelayQuery.prototype.toObject = function(opt_includeInstance) {
-  return proto.GroupDelayQuery.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.GroupDelayQuery} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.GroupDelayQuery.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    fromtimestamp: jspb.Message.getFieldWithDefault(msg, 1, 0),
-    totimestamp: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    beamtimefilter: jspb.Message.getFieldWithDefault(msg, 3, "")
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.GroupDelayQuery}
- */
-proto.GroupDelayQuery.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.GroupDelayQuery;
-  return proto.GroupDelayQuery.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.GroupDelayQuery} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.GroupDelayQuery}
- */
-proto.GroupDelayQuery.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setFromtimestamp(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint64());
-      msg.setTotimestamp(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setBeamtimefilter(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.GroupDelayQuery.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.GroupDelayQuery.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.GroupDelayQuery} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.GroupDelayQuery.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getFromtimestamp();
-  if (f !== 0) {
-    writer.writeUint64(
-      1,
-      f
-    );
-  }
-  f = message.getTotimestamp();
-  if (f !== 0) {
-    writer.writeUint64(
-      2,
-      f
-    );
-  }
-  f = message.getBeamtimefilter();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-};
-
-
-/**
- * optional uint64 fromTimestamp = 1;
- * @return {number}
- */
-proto.GroupDelayQuery.prototype.getFromtimestamp = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.GroupDelayQuery} returns this
- */
-proto.GroupDelayQuery.prototype.setFromtimestamp = function(value) {
-  return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-/**
- * optional uint64 toTimestamp = 2;
- * @return {number}
- */
-proto.GroupDelayQuery.prototype.getTotimestamp = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.GroupDelayQuery} returns this
- */
-proto.GroupDelayQuery.prototype.setTotimestamp = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional string beamtimeFilter = 3;
- * @return {string}
- */
-proto.GroupDelayQuery.prototype.getBeamtimefilter = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.GroupDelayQuery} returns this
- */
-proto.GroupDelayQuery.prototype.setBeamtimefilter = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.GroupDelayResponseItem.prototype.toObject = function(opt_includeInstance) {
-  return proto.GroupDelayResponseItem.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.GroupDelayResponseItem} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.GroupDelayResponseItem.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    groupid: jspb.Message.getFieldWithDefault(msg, 1, ""),
-    delayms: jspb.Message.getFieldWithDefault(msg, 2, 0),
-    pipelinestep: jspb.Message.getFieldWithDefault(msg, 3, "")
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.GroupDelayResponseItem}
- */
-proto.GroupDelayResponseItem.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.GroupDelayResponseItem;
-  return proto.GroupDelayResponseItem.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.GroupDelayResponseItem} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.GroupDelayResponseItem}
- */
-proto.GroupDelayResponseItem.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setGroupid(value);
-      break;
-    case 2:
-      var value = /** @type {number} */ (reader.readUint32());
-      msg.setDelayms(value);
-      break;
-    case 3:
-      var value = /** @type {string} */ (reader.readString());
-      msg.setPipelinestep(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.GroupDelayResponseItem.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.GroupDelayResponseItem.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.GroupDelayResponseItem} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.GroupDelayResponseItem.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getGroupid();
-  if (f.length > 0) {
-    writer.writeString(
-      1,
-      f
-    );
-  }
-  f = message.getDelayms();
-  if (f !== 0) {
-    writer.writeUint32(
-      2,
-      f
-    );
-  }
-  f = message.getPipelinestep();
-  if (f.length > 0) {
-    writer.writeString(
-      3,
-      f
-    );
-  }
-};
-
-
-/**
- * optional string groupId = 1;
- * @return {string}
- */
-proto.GroupDelayResponseItem.prototype.getGroupid = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.GroupDelayResponseItem} returns this
- */
-proto.GroupDelayResponseItem.prototype.setGroupid = function(value) {
-  return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-/**
- * optional uint32 delayMs = 2;
- * @return {number}
- */
-proto.GroupDelayResponseItem.prototype.getDelayms = function() {
-  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.GroupDelayResponseItem} returns this
- */
-proto.GroupDelayResponseItem.prototype.setDelayms = function(value) {
-  return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional string pipelineStep = 3;
- * @return {string}
- */
-proto.GroupDelayResponseItem.prototype.getPipelinestep = function() {
-  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.GroupDelayResponseItem} returns this
- */
-proto.GroupDelayResponseItem.prototype.setPipelinestep = function(value) {
-  return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array<number>}
- * @const
- */
-proto.GroupDelayResponse.repeatedFields_ = [1];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
- * For the list of reserved names please see:
- *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- *     JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.GroupDelayResponse.prototype.toObject = function(opt_includeInstance) {
-  return proto.GroupDelayResponse.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- *     the JSPB instance for transitional soy proto support:
- *     http://goto/soy-param-migration
- * @param {!proto.GroupDelayResponse} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.GroupDelayResponse.toObject = function(includeInstance, msg) {
-  var f, obj = {
-    groupidsList: jspb.Message.toObjectList(msg.getGroupidsList(),
-    proto.GroupDelayResponseItem.toObject, includeInstance)
-  };
-
-  if (includeInstance) {
-    obj.$jspbMessageInstance = msg;
-  }
-  return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.GroupDelayResponse}
- */
-proto.GroupDelayResponse.deserializeBinary = function(bytes) {
-  var reader = new jspb.BinaryReader(bytes);
-  var msg = new proto.GroupDelayResponse;
-  return proto.GroupDelayResponse.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.GroupDelayResponse} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.GroupDelayResponse}
- */
-proto.GroupDelayResponse.deserializeBinaryFromReader = function(msg, reader) {
-  while (reader.nextField()) {
-    if (reader.isEndGroup()) {
-      break;
-    }
-    var field = reader.getFieldNumber();
-    switch (field) {
-    case 1:
-      var value = new proto.GroupDelayResponseItem;
-      reader.readMessage(value,proto.GroupDelayResponseItem.deserializeBinaryFromReader);
-      msg.addGroupids(value);
-      break;
-    default:
-      reader.skipField();
-      break;
-    }
-  }
-  return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.GroupDelayResponse.prototype.serializeBinary = function() {
-  var writer = new jspb.BinaryWriter();
-  proto.GroupDelayResponse.serializeBinaryToWriter(this, writer);
-  return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.GroupDelayResponse} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.GroupDelayResponse.serializeBinaryToWriter = function(message, writer) {
-  var f = undefined;
-  f = message.getGroupidsList();
-  if (f.length > 0) {
-    writer.writeRepeatedMessage(
-      1,
-      f,
-      proto.GroupDelayResponseItem.serializeBinaryToWriter
-    );
-  }
-};
-
-
-/**
- * repeated GroupDelayResponseItem groupIds = 1;
- * @return {!Array<!proto.GroupDelayResponseItem>}
- */
-proto.GroupDelayResponse.prototype.getGroupidsList = function() {
-  return /** @type{!Array<!proto.GroupDelayResponseItem>} */ (
-    jspb.Message.getRepeatedWrapperField(this, proto.GroupDelayResponseItem, 1));
-};
-
-
-/**
- * @param {!Array<!proto.GroupDelayResponseItem>} value
- * @return {!proto.GroupDelayResponse} returns this
-*/
-proto.GroupDelayResponse.prototype.setGroupidsList = function(value) {
-  return jspb.Message.setRepeatedWrapperField(this, 1, value);
-};
-
-
-/**
- * @param {!proto.GroupDelayResponseItem=} opt_value
- * @param {number=} opt_index
- * @return {!proto.GroupDelayResponseItem}
- */
-proto.GroupDelayResponse.prototype.addGroupids = function(opt_value, opt_index) {
-  return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.GroupDelayResponseItem, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.GroupDelayResponse} returns this
- */
-proto.GroupDelayResponse.prototype.clearGroupidsList = function() {
-  return this.setGroupidsList([]);
-};
-
-
-/**
- * @enum {number}
- */
-proto.PipelineConnectionQueryMode = {
-  INVALID_QUERY_MODE: 0,
-  EXACTPATH: 1,
-  JUSTRELATEDTOSTEP: 2
-};
-
-goog.object.extend(exports, proto);
diff --git a/monitoring/monitoring_ui/src/store/groupDelayStore.ts b/monitoring/monitoring_ui/src/store/groupDelayStore.ts
index 55b22071a55dbcd104af0407a5e56320c12d1167..b3ec3c0a262206637b111859784e1be91c7f95cf 100644
--- a/monitoring/monitoring_ui/src/store/groupDelayStore.ts
+++ b/monitoring/monitoring_ui/src/store/groupDelayStore.ts
@@ -36,8 +36,8 @@ class GroupDelayStore {
         const newGroupIds: string[] = [];
         for (const groupId of groupDelayData.getGroupidsList()) {
             const value: string = groupId.getGroupid() + groupId.getDelayms()
-            newGroupIds.push(groupId.getGroupid().padEnd(25, '\xa0') +
-                groupId.getPipelinestep().padEnd(25, '\xa0') +
+            newGroupIds.push(groupId.getGroupid().padEnd(35, '\xa0') + " " +
+                groupId.getPipelinestep().padEnd(35, '\xa0') + " " + groupId.getIdx() + "  " +
                 this.beautifyDelayMs(groupId.getDelayms()))
         }