Commit 665e32ee authored by Yann Garcia's avatar Yann Garcia
Browse files

Update meGetAppList filter

parent 223226dc
Loading
Loading
Loading
Loading
+231 −53
Original line number Diff line number Diff line
@@ -17,7 +17,10 @@
package sbi

import (
	"errors"
	"strconv"
	"sync"

	//"time"

	//dataModel "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-model"
@@ -306,65 +309,82 @@ func processActiveScenarioUpdate() {
	}
}

/*func startRefreshTicker() {
	log.Info("Starting refresh loop")
	sbi.refreshTicker = time.NewTicker(1000 * time.Millisecond)
	go func() {
		for range sbi.refreshTicker.C {
			_ = refreshAppList()
		}
	}()
// ETSI GS MEC 016 V2.2.1 (2020-04) Clause 7.3.3.1 GET
func GetApplicationListAppList(appNames []string, appProviders []string, appSoftVersions []string, vendorIds []string, serviceConts []string) (appListSbi *map[string]*tm.AppInfoList, err error) {
	log.Debug(">>> GetApplicationListAppList: ", appNames)

	appListSbi, err = GetAllListAppList()
	if err != nil {
		log.Error(err.Error())
		return nil, err
	}

func stopRefreshTicker() {
	if sbi.refreshTicker != nil {
		sbi.refreshTicker.Stop()
		sbi.refreshTicker = nil
		log.Info("Refresh loop stopped")
	// Apply criteria
	if len(appNames) != 0 {
		filteredAppListSbi := filterAppNames(appNames, appListSbi)
		log.Debug("GetApplicationListAppList: After appName, filteredAppListSbi: ", filteredAppListSbi)
		if len(appProviders) != 0 && len(filteredAppListSbi) != 0 {
			filterExcludeAppProviders(appProviders, &filteredAppListSbi)
			log.Debug("GetApplicationListAppList: After appProvider, filteredAppListSbi: ", filteredAppListSbi)
		}
		if len(appSoftVersions) != 0 && len(filteredAppListSbi) != 0 {
			filterExcludeAppSoftVersion(appSoftVersions, &filteredAppListSbi)
			log.Debug("GetApplicationListAppList: After appSoftVersion, filteredAppListSbi: ", filteredAppListSbi)
		}

// refreshAppList - Update AppList data struct
func refreshAppList() error {
	sbi.mutex.Lock()
	defer sbi.mutex.Unlock()
	log.Info("Update AppList data struct")

	// Build the list of all application
	appInfo, err := sbi.daiMgr.GetAllAppList()
	if err != nil {
		log.Error(err.Error())
		return err
		// FIXME if len(vendorIds) != 0 && len(filteredAppListSbi) != 0 {
		if len(serviceConts) != 0 && len(filteredAppListSbi) != 0 {
			filterExcludeServiceConts(serviceConts, &filteredAppListSbi)
			log.Debug("GetApplicationListAppList: After appSoftVersion, filteredAppListSbi: ", filteredAppListSbi)
		}
	log.Debug("appContextMap: ", appInfo)

	// Store it into Redis
		log.Debug("<<< GetApplicationListAppList: ", filteredAppListSbi)
		return &filteredAppListSbi, nil
	} else if len(appProviders) != 0 {
		filteredAppListSbi := filterAppProviders(appProviders, appListSbi)
		log.Debug("GetApplicationListAppList: After appProvider, filteredAppListSbi: ", filteredAppListSbi)
		if len(appSoftVersions) != 0 && len(filteredAppListSbi) != 0 {
			filterExcludeAppSoftVersion(appSoftVersions, &filteredAppListSbi)
			log.Debug("GetApplicationListAppList: After appSoftVersion, filteredAppListSbi: ", filteredAppListSbi)
		}
		// FIXME if len(vendorIds) != 0 && len(filteredAppListSbi) != 0 {
		if len(serviceConts) != 0 && len(filteredAppListSbi) != 0 {
			filterExcludeServiceConts(serviceConts, &filteredAppListSbi)
			log.Debug("GetApplicationListAppList: After appSoftVersion, filteredAppListSbi: ", filteredAppListSbi)
		}

	return nil
}*/
		log.Debug("<<< GetApplicationListAppList: ", filteredAppListSbi)
		return &filteredAppListSbi, nil
	} else if len(appSoftVersions) != 0 {
		filteredAppListSbi := filterAppSoftVersions(appSoftVersions, appListSbi)
		// FIXME if len(vendorIds) != 0 && len(filteredAppListSbi) != 0 {
		if len(serviceConts) != 0 && len(filteredAppListSbi) != 0 {
			filterExcludeServiceConts(serviceConts, &filteredAppListSbi)
			log.Debug("GetApplicationListAppList: After appSoftVersion, filteredAppListSbi: ", filteredAppListSbi)
		}

// ETSI GS MEC 016 V2.2.1 (2020-04) Clause 7.3.3.1 GET
func GetApplicationListAppList(appNames []string) (appListSbi *map[string]*tm.AppInfoList, err error) {
	log.Debug(">>> GetApplicationListAppList: ", appNames)
		log.Debug("<<< GetApplicationListAppList: ", filteredAppListSbi)
		return &filteredAppListSbi, nil
	// FIXME } else if len(vendorIds) != 0 {
	} else if len(serviceConts) != 0 {
		filteredAppListSbi := filterServiceConts(serviceConts, appListSbi)

	appListSbi, err = GetAllListAppList()
	if err != nil {
		log.Error(err.Error())
		return nil, err
		log.Debug("<<< GetApplicationListAppList: ", filteredAppListSbi)
		return &filteredAppListSbi, nil
	}

	// Apply criteria
	if len(appNames) == 0 {
	log.Debug("<<< GetApplicationListAppList: ", appListSbi)
	return appListSbi, nil
}

func filterAppNames(appNames []string, appListSbi *map[string]*tm.AppInfoList) (map[string]*tm.AppInfoList) {
	filteredAppListSbi := make(map[string]*tm.AppInfoList)
	for _, appName := range appNames {
		log.Debug("filterAppNames: Processing appName: ", appName)
		// Remove quotes
		if appName != "" {
			appName = appName[1 : len(appName) - 1] // Remove quotes
		}
		log.Debug("filterAppNames: After removing quotes: appName: ", appName)
		// Search for the entry
		for _, item := range *appListSbi {
			if item.AppName == appName {
@@ -373,8 +393,135 @@ func GetApplicationListAppList(appNames []string) (appListSbi *map[string]*tm.Ap
		} // End of 'for' statement
	} // End of 'for' statement

	log.Debug("<<< GetApplicationListAppList: ", filteredAppListSbi)
	return &filteredAppListSbi, nil
	return filteredAppListSbi
}

func filterAppProviders(appProviders []string, appListSbi *map[string]*tm.AppInfoList) (map[string]*tm.AppInfoList) {
	filteredAppListSbi := make(map[string]*tm.AppInfoList)
	for _, appProvider := range appProviders {
		log.Debug("filterAppProviders: Processing appProvider: ", appProvider)
		// Remove quotes
		if appProvider != "" {
			appProvider = appProvider[1 : len(appProvider) - 1] // Remove quotes
		}
		log.Debug("filterAppProviders: After removing quotes: appSoftVersion: ", appProvider)
		// Search for the entry
		for _, item := range *appListSbi {
			if item.AppProvider == appProvider {
				filteredAppListSbi[item.AppName] = item
			}
		} // End of 'for' statement
	} // End of 'for' statement

	return filteredAppListSbi
}

func filterAppSoftVersions(appSoftVersions []string, appListSbi *map[string]*tm.AppInfoList) (map[string]*tm.AppInfoList) {
	filteredAppListSbi := make(map[string]*tm.AppInfoList)
	for _, appSoftVersion := range appSoftVersions {
		log.Debug("filterAppSoftVersions: Processing appSoftVersion: ", appSoftVersion)
		// Remove quotes
		if appSoftVersion != "" {
			appSoftVersion = appSoftVersion[1 : len(appSoftVersion) - 1] // Remove quotes
		}
		log.Debug("filterAppSoftVersions: After removing quotes: appSoftVersion: ", appSoftVersion)
		// Search for the entry
		for _, item := range *appListSbi {
			if item.AppSoftVersion == appSoftVersion {
				filteredAppListSbi[item.AppName] = item
			}
		} // End of 'for' statement
	} // End of 'for' statement

	return filteredAppListSbi
}

func filterServiceConts(serviceConts []string, appListSbi *map[string]*tm.AppInfoList) (map[string]*tm.AppInfoList) {
	filteredAppListSbi := make(map[string]*tm.AppInfoList)
	for _, serviceCount := range serviceConts {
		log.Debug("filterServiceConts: Processing serviceCount: ", serviceCount)
		// Remove quotes
		if serviceCount != "" {
			serviceCount = serviceCount[1 : len(serviceCount) - 1] // Remove quotes
		}
		log.Debug("filterServiceConts: After removing quotes: appSoftVersion: ", serviceCount)
		svcCount, _ := strconv.ParseUint(serviceCount, 10, 32)
		svcCount32 := uint32(svcCount)
		// Search for the entry
		for _, item := range *appListSbi {
			if len(item.AppCharcs) != 0 {
				for _, sc := range item.AppCharcs {
					if sc.ServiceCont != nil && *sc.ServiceCont == svcCount32 {
						filteredAppListSbi[item.AppName] = item
						break
					}
				} // End of 'for' statement
			}
		} // End of 'for' statement
	} // End of 'for' statement

	return filteredAppListSbi
}

func filterExcludeAppProviders(appProviders []string, filteredAppListSbi *map[string]*tm.AppInfoList) {
	for _, appProvider := range appProviders {
		log.Debug("filterExcludeAppProviders: Processing appProvider: ", appProvider)
		// Remove quotes
		if appProvider != "" {
			appProvider = appProvider[1 : len(appProvider) - 1] // Remove quotes
		}
		log.Debug("filterExcludeAppProviders: After removing quotes: appProvider: ", appProvider)
		// Search for the entry
		for _, item := range *filteredAppListSbi {
			if item.AppProvider != appProvider {
				log.Debug("filterExcludeAppProviders: Removing entry: ", item.AppName)
				delete(*filteredAppListSbi, item.AppName)
			}
		} // End of 'for' statement
	} // End of 'for' statement
}

func filterExcludeAppSoftVersion(appSoftVersions []string, filteredAppListSbi *map[string]*tm.AppInfoList) {
	for _, appSoftVersion := range appSoftVersions {
		log.Debug("GetApplicationListAppList: Processing appProvider: ", appSoftVersion)
		// Remove quotes
		if appSoftVersion != "" {
			appSoftVersion = appSoftVersion[1 : len(appSoftVersion) - 1] // Remove quotes
		}
		log.Debug("GetApplicationListAppList: After removing quotes: appSoftVersion: ", appSoftVersion)
		// Search for the entry
		for _, item := range *filteredAppListSbi {
			if item.AppSoftVersion != appSoftVersion {
				log.Debug("GetApplicationListAppList: Removing entry: ", appSoftVersion)
				delete(*filteredAppListSbi, item.AppName)
			}
		} // End of 'for' statement
	} // End of 'for' statement
}

func filterExcludeServiceConts(serviceConts []string, filteredAppListSbi *map[string]*tm.AppInfoList) {
	for _, serviceCount := range serviceConts {
		log.Debug("filterExcludeServiceConts: Processing serviceCount: ", serviceCount)
		// Remove quotes
		if serviceCount != "" {
			serviceCount = serviceCount[1 : len(serviceCount) - 1] // Remove quotes
		}
		log.Debug("filterExcludeServiceConts: After removing quotes: serviceCount: ", serviceCount)
		svcCount, _ := strconv.ParseUint(serviceCount, 10, 32)
		svcCount32 := uint32(svcCount)
		// Search for the entry
		for _, item := range *filteredAppListSbi {
			if len(item.AppCharcs) != 0 {
				for _, sc := range item.AppCharcs {
					if sc.ServiceCont != nil && *sc.ServiceCont != svcCount32 {
						log.Debug("filterExcludeServiceConts: Removing entry: ", item.AppName)
						delete(*filteredAppListSbi, item.AppName)
						break
					}
				} // End of 'for' statement
			}
		} // End of 'for' statement
	} // End of 'for' statement
}

func GetAllListAppList() (appListSbi *map[string]*tm.AppInfoList, err error) {
@@ -386,30 +533,23 @@ func GetAllListAppList() (appListSbi *map[string]*tm.AppInfoList, err error) {
		return nil, err
	}
	appListSbi = &appInfoList
	log.Debug("appListSbi: ", appListSbi)
	log.Debug("len(appListSbi): ", len(*appListSbi))

	//sbi.updateAppInfoCB(appListSbi)
	return appListSbi, nil
}

func CreateAppContext(appContextSbi *tm.AppContext) (appContextSbi_ *tm.AppContext, err error) {
	log.Debug(">>> CreateAppContext: ", appContextSbi)

	appContextSbi_, err = sbi.daiMgr.CreateAppContext(appContextSbi)
	if err != nil {
		log.Error(err.Error())
		return nil, err
	}
	log.Debug("CreateAppContext: *appContextSbi_.ContextId: ", *appContextSbi_.ContextId)
	log.Debug("CreateAppContext: appContextSbi_.AppInfo: ", appContextSbi_.AppInfo)
	log.Debug("CreateAppContext: appContextSbi_.AppInfo.UserAppInstanceInfo: ", appContextSbi_.AppInfo.UserAppInstanceInfo)

	return appContextSbi_, nil
}

func DeleteAppContext(contextId string) (err error) {
	log.Debug(">>> DeleteAppContext: ", contextId)

	err = sbi.daiMgr.DeleteAppContext(contextId)
	if err != nil {
@@ -421,8 +561,6 @@ func DeleteAppContext(contextId string) (err error) {
}

func PutAppContext(appContextSbi tm.AppContext) (err error) {
	log.Debug(">>> PutAppContext: ", appContextSbi)
	log.Debug(">>> PutAppContext: ", *appContextSbi.ContextId)

	err = sbi.daiMgr.PutAppContext(appContextSbi)
	if err != nil {
@@ -433,6 +571,46 @@ func PutAppContext(appContextSbi tm.AppContext) (err error) {
	return nil
}

func PosApplicationLocationAvailability(applicationLocationAvailabilitySbi *tm.ApplicationLocationAvailability) (applicationLocationAvailability_ *tm.ApplicationLocationAvailability, err error) {
	log.Debug(">>> PosApplicationLocationAvailability: ", applicationLocationAvailabilitySbi)

	// Retrieve the AppInfo data for the specified application
	var appNames = []string{strconv.Quote(applicationLocationAvailabilitySbi.AppInfo.AppName)}
	var appProviders = []string{strconv.Quote(applicationLocationAvailabilitySbi.AppInfo.AppProvider)}
	var appSoftVersions []string
	if applicationLocationAvailabilitySbi.AppInfo.AppSoftVersion != nil {
		appSoftVersions = []string{strconv.Quote(*applicationLocationAvailabilitySbi.AppInfo.AppSoftVersion)}
	}
	var vendorIds []string // FIXME To be done
	var serviceConts []string // FIXME To be done
	appListSbi, err := GetApplicationListAppList(appNames, appProviders, appSoftVersions, vendorIds, serviceConts)
	if err != nil {
		log.Error(err.Error())
		return nil, err
	}

	if len(*appListSbi) == 0 {
		err = errors.New("No application found for " + applicationLocationAvailabilitySbi.AppInfo.AppName)
		log.Error(err.Error())
		return nil, err
	}

	applicationLocationAvailability_ = applicationLocationAvailabilitySbi
	for _, item := range *appListSbi {
		if item.AppName != applicationLocationAvailabilitySbi.AppInfo.AppName {
			err = errors.New("Wrong application found for " + applicationLocationAvailabilitySbi.AppInfo.AppName + "- " + item.AppName)
			log.Error(err.Error())
			return nil, err
		}
		applicationLocationAvailability_.AppInfo.AvailableLocations = make(tm.AvailableLocations, 1)
		applicationLocationAvailability_.AppInfo.AvailableLocations[0].AppLocation = new(tm.LocationConstraints)
		*applicationLocationAvailability_.AppInfo.AvailableLocations[0].AppLocation = item.AppLocation
		break
	} // End of 'for' statement

	return applicationLocationAvailability_, nil
}

/*func notifyAppContextDeletion(appContextSbi tm.AppContext) (err error) {
	log.Debug(">>> notifyAppContextDeletion: ", appContextSbi)
	log.Debug(">>> notifyAppContextDeletion: ", *appContextSbi.ContextId)
+9 −0
Original line number Diff line number Diff line
@@ -50,6 +50,15 @@ func convertApplicationListToJson(obj *ApplicationList) string {
	return string(jsonInfo)
}

func convertApplicationLocationAvailabilityToJson(applicationLocationAvailability *ApplicationLocationAvailability) string {
	jsonInfo, err := json.Marshal(*applicationLocationAvailability)
	if err != nil {
		log.Error(err.Error())
		return ""
	}
	return string(jsonInfo)
}

func convertProblemDetailstoJson(probdetails *ProblemDetails) string {
	jsonInfo, err := json.Marshal(*probdetails)
	if err != nil {
+99 −6
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import (
	"os"
	"strconv"
	"strings"

	//"sync"
	"time"

@@ -386,7 +387,6 @@ func Init() (err error) {
	sbiCfg := sbi.SbiCfg{
		ModuleName:               moduleName,
		SandboxName:              sandboxName,
		MepName:                  mepName,
		RedisAddr:                redisAddr,
		PostgisHost:              postgresHost,
		PostgisPort:              postgresPort,
@@ -396,6 +396,9 @@ func Init() (err error) {
		NotifyAppContextDeletion: notifyAppContextDeletion,
		CleanUpCb:                cleanUp,
	}
	if mepName != defaultMepName {
		sbiCfg.MepName = mepName
	}
	err = sbi.Init(sbiCfg)
	if err != nil {
		log.Fatal("Failed initialize SBI. Error: ", err)
@@ -591,14 +594,20 @@ func meAppListGET(w http.ResponseWriter, r *http.Request) {
	u, _ := url.Parse(r.URL.String())
	log.Info("url: ", u)
	q := u.Query()
	appName := q["appName"] //q.Get("appName")
	// if appName != "" {
	// 	appName = appName[1 : len(appName)-1] // Remove quotes
	// }
	appName := q["appName"]
	appProvider := q["appProvider"]
	appSoftVersion := q["appSoftVersion"]
	vendorId := q["vendorId"]
	serviceCont := q["serviceCont"]

	log.Debug("meAppListGET: appName: ", appName)
	log.Debug("meAppListGET: appProvider: ", appProvider)
	log.Debug("meAppListGET: appSoftVersion: ", appSoftVersion)
	log.Debug("meAppListGET: vendorId: ", vendorId)
	log.Debug("meAppListGET: serviceCont: ", serviceCont)

	// Get the ApplicationList
	appInfoList, err := sbi.GetApplicationListAppList(appName)
	appInfoList, err := sbi.GetApplicationListAppList(appName, appProvider, appSoftVersion, vendorId, serviceCont)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
@@ -870,7 +879,91 @@ func devAppContextPUT(w http.ResponseWriter, r *http.Request) {
}

func appLocationAvailabilityPOST(w http.ResponseWriter, r *http.Request) {
	log.Debug(">>> appLocationAvailabilityPOST: ", r.Body)

	// Retrive the AppContext message body
	var applicationLocationAvailability ApplicationLocationAvailability
	bodyBytes, _ := ioutil.ReadAll(r.Body)
	err := json.Unmarshal(bodyBytes, &applicationLocationAvailability)
	if err != nil {
		log.Error(err.Error())
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	log.Info("appLocationAvailabilityPOST: ", applicationLocationAvailability)

	// Sanity checks
	if applicationLocationAvailability.AppInfo == nil {
		err = errors.New("AppInfo mismatch")
		log.Error(err.Error())
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	if applicationLocationAvailability.AppInfo.AppPackageSource == "" { // Check presence of the filed AppPackageSource in te request
		err = errors.New("AppPackageSource mismatch")
		log.Error(err.Error())
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	var applicationLocationAvailabilitySbi meepdaimgr.ApplicationLocationAvailability
	applicationLocationAvailabilitySbi.AppInfo = new(meepdaimgr.ApplicationLocationAvailabilityAppInfo)
	applicationLocationAvailabilitySbi.AppInfo.AppName = applicationLocationAvailability.AppInfo.AppName
	applicationLocationAvailabilitySbi.AppInfo.AppProvider = applicationLocationAvailability.AppInfo.AppProvider
	applicationLocationAvailabilitySbi.AppInfo.AppSoftVersion = new(string)
	*applicationLocationAvailabilitySbi.AppInfo.AppSoftVersion = applicationLocationAvailability.AppInfo.AppSoftVersion
	applicationLocationAvailabilitySbi.AppInfo.AppDVersion = applicationLocationAvailability.AppInfo.AppDVersion
	applicationLocationAvailabilitySbi.AppInfo.AppDescription = applicationLocationAvailability.AppInfo.AppDescription
	applicationLocationAvailabilitySbi.AppInfo.AppPackageSource = new(meepdaimgr.Uri)
	*applicationLocationAvailabilitySbi.AppInfo.AppPackageSource = meepdaimgr.Uri(applicationLocationAvailability.AppInfo.AppPackageSource)
	// FIXME Should AvailableLocations field bet set ?
	applicationLocationAvailabilitySbi.AssociateDevAppId = applicationLocationAvailability.AssociateDevAppId
	applicationLocationAvailabilitySbi_, err := sbi.PosApplicationLocationAvailability(&applicationLocationAvailabilitySbi)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}

	// Build response: only update AvailableLocations field
	log.Debug("devAppContextsPOST: applicationLocationAvailabilitySbi_.AppInfo.AvailableLocations: ", applicationLocationAvailabilitySbi_.AppInfo.AvailableLocations)
	log.Debug("devAppContextsPOST: len(applicationLocationAvailabilitySbi_.AppInfo.AvailableLocations): ", len(applicationLocationAvailabilitySbi_.AppInfo.AvailableLocations))
	applicationLocationAvailability.AppInfo.AvailableLocations = make([]ApplicationLocationAvailabilityAppInfoAvailableLocations, len(applicationLocationAvailabilitySbi_.AppInfo.AvailableLocations))
	if len(applicationLocationAvailability.AppInfo.AvailableLocations) != 0 {
		for i, item := range applicationLocationAvailabilitySbi_.AppInfo.AvailableLocations {
			fmt.Printf("Type of item.AppLocation: %T\n", (*item.AppLocation)[0])
			applicationLocationAvailability.AppInfo.AvailableLocations[i].AppLocation = new(LocationConstraints)

			if (*item.AppLocation)[0].Area != nil {
				applicationLocationAvailability.AppInfo.AvailableLocations[i].AppLocation.Area.Coordinates = (*item.AppLocation)[0].Area.Coordinates
			}

			if (*item.AppLocation)[0].CivicAddressElement != nil {
				applicationLocationAvailability.AppInfo.AvailableLocations[i].AppLocation.CivicAddressElement = make([]LocationConstraintsCivicAddressElement, len(*(*item.AppLocation)[0].CivicAddressElement))
				for j, cv := range *(*item.AppLocation)[0].CivicAddressElement {
					applicationLocationAvailability.AppInfo.AvailableLocations[i].AppLocation.CivicAddressElement[j].CaType = cv.CaType
					applicationLocationAvailability.AppInfo.AvailableLocations[i].AppLocation.CivicAddressElement[j].CaValue = cv.CaValue
				} // End of 'for' statement
			}

			if (*item.AppLocation)[0].CountryCode != nil {
				log.Debug("devAppContextsPOST: *(*item.AppLocation)[0].CountryCode: ", *(*item.AppLocation)[0].CountryCode)
				fmt.Printf("Type of item.AppLocation: %T\n", *(*item.AppLocation)[0].CountryCode)
				applicationLocationAvailability.AppInfo.AvailableLocations[i].AppLocation.CountryCode = *(*item.AppLocation)[0].CountryCode
			}
			log.Debug("devAppContextsPOST: applicationLocationAvailability.AppInfo.AvailableLocations[i].AppLocation: ", applicationLocationAvailability.AppInfo.AvailableLocations[i].AppLocation)
		} // End of 'for' statement
	}
	log.Debug("devAppContextsPOST: applicationLocationAvailability.AppInfo.AvailableLocations: ", applicationLocationAvailability.AppInfo.AvailableLocations)

	// Build the response
	var jsonResponse string = convertApplicationLocationAvailabilityToJson(&applicationLocationAvailability)
	log.Info("json response: ", jsonResponse)

	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusCreated)
	fmt.Fprintf(w, string(jsonResponse))

	w.WriteHeader(http.StatusOK)
}

+209 −17

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ func cmdExec(cli string) (appExecEntry AppExecEntry, err error) {
		if err == nil {
			fmt.Println("process terminated normally for pid ", appExecEntry.cmd.Process.Pid)
		} else {
			fmt.Println("iperf terminated abnormally for pid :",  appExecEntry.cmd.Process.Pid, ", ", err)
			fmt.Println("process terminated abnormally for pid :",  appExecEntry.cmd.Process.Pid, ", ", err)
		}
	}()

Loading