2 * Copyright (c) 2018 ZTE Corporation.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * and the Apache License 2.0 which both accompany this distribution,
6 * and are available at http://www.eclipse.org/legal/epl-v10.html
7 * and http://www.apache.org/licenses/LICENSE-2.0
10 * ZTE - initial Project
15 cachedServices []*models.MsbService
18 func SyncMsbData(newServices []*models.MsbService) {
19 log.Log.Debug("sync msb rewrite rule to pilot")
20 createServices, updateServices, deleteServices := compareServices(cachedServices, newServices)
22 log.Log.Debug("SyncMsbData: ", len(createServices), len(updateServices), len(deleteServices))
24 cachedServices = newServices
27 func compareServices(oldServices, newServices []*models.MsbService) (createServices, updateServices, deleteServices []*models.MsbService) {
28 oldServiceMap := toServiceMap(oldServices)
29 newServiceMap := toServiceMap(newServices)
31 for key, newService := range newServiceMap {
32 if oldService, exist := oldServiceMap[key]; exist {
33 // service exist: check whether need to update
34 if oldService.ModifyIndex != newService.ModifyIndex {
35 updateServices = append(updateServices, newService)
38 // service not exist: add
39 createServices = append(createServices, newService)
42 delete(oldServiceMap, key)
45 for _, service := range oldServiceMap {
46 deleteServices = append(deleteServices, service)
52 func toServiceMap(services []*models.MsbService) map[string]*models.MsbService {
53 serviceMap := make(map[string]*models.MsbService)
55 for _, service := range services {
56 serviceMap[service.ServiceName] = service