1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.tradefed.cluster; 17 18 import com.android.tradefed.command.remote.DeviceDescriptor; 19 20 import org.json.JSONArray; 21 import org.json.JSONException; 22 import org.json.JSONObject; 23 24 import java.util.LinkedHashMap; 25 import java.util.Map; 26 27 /** A class to encapsulate cluster device info to be uploaded. */ 28 public class ClusterDeviceInfo { 29 private String mRunTarget; 30 private String mGroupName; 31 private DeviceDescriptor mDeviceDescriptor; 32 private Map<String, String> mExtraInfo; 33 ClusterDeviceInfo( DeviceDescriptor deviceDescriptor, String runTarget, String groupName, Map<String, String> extraInfo)34 private ClusterDeviceInfo( 35 DeviceDescriptor deviceDescriptor, 36 String runTarget, 37 String groupName, 38 Map<String, String> extraInfo) { 39 mDeviceDescriptor = deviceDescriptor; 40 mRunTarget = runTarget; 41 mGroupName = groupName; 42 mExtraInfo = new LinkedHashMap<>(extraInfo); 43 } 44 getRunTarget()45 public String getRunTarget() { 46 return mRunTarget; 47 } 48 getGroupName()49 public String getGroupName() { 50 return mGroupName; 51 } 52 getDeviceDescriptor()53 public DeviceDescriptor getDeviceDescriptor() { 54 return mDeviceDescriptor; 55 } 56 getExtraInfo()57 public Map<String, String> getExtraInfo() { 58 return new LinkedHashMap<>(mExtraInfo); 59 } 60 61 public static class Builder { 62 private DeviceDescriptor mDeviceDescriptor; 63 private String mRunTarget; 64 private String mGroupName; 65 private Map<String, String> mExtraInfo = new LinkedHashMap<>(); 66 Builder()67 public Builder() {} 68 setRunTarget(final String runTarget)69 public Builder setRunTarget(final String runTarget) { 70 mRunTarget = runTarget; 71 return this; 72 } 73 setGroupName(final String groupName)74 public Builder setGroupName(final String groupName) { 75 mGroupName = groupName; 76 return this; 77 } 78 setDeviceDescriptor(final DeviceDescriptor deviceDescriptor)79 public Builder setDeviceDescriptor(final DeviceDescriptor deviceDescriptor) { 80 mDeviceDescriptor = deviceDescriptor; 81 mExtraInfo.put("hardware_revision", deviceDescriptor.getHardwareRevision()); 82 return this; 83 } 84 addExtraInfo(final Map<String, String> extraInfo)85 public Builder addExtraInfo(final Map<String, String> extraInfo) { 86 mExtraInfo.putAll(extraInfo); 87 return this; 88 } 89 build()90 public ClusterDeviceInfo build() { 91 final ClusterDeviceInfo deviceInfo = 92 new ClusterDeviceInfo(mDeviceDescriptor, mRunTarget, mGroupName, mExtraInfo); 93 return deviceInfo; 94 } 95 } 96 97 /** 98 * Generates the JSON Object for this device info. 99 * 100 * @return JSONObject equivalent of this device info. 101 * @throws JSONException 102 */ toJSON()103 public JSONObject toJSON() throws JSONException { 104 final JSONObject json = new JSONObject(); 105 json.put("device_serial", ClusterHostUtil.getUniqueDeviceSerial(mDeviceDescriptor)); 106 json.put("run_target", mRunTarget); 107 json.put("build_id", mDeviceDescriptor.getBuildId()); 108 json.put("product", mDeviceDescriptor.getProduct()); 109 json.put("product_variant", mDeviceDescriptor.getProductVariant()); 110 json.put("sdk_version", mDeviceDescriptor.getSdkVersion()); 111 json.put("battery_level", mDeviceDescriptor.getBatteryLevel()); 112 json.put("mac_address", mDeviceDescriptor.getMacAddress()); 113 json.put("sim_state", mDeviceDescriptor.getSimState()); 114 json.put("sim_operator", mDeviceDescriptor.getSimOperator()); 115 json.put("state", mDeviceDescriptor.getState()); 116 json.put("is_stub_device", mDeviceDescriptor.isStubDevice()); 117 json.put("preconfigured_ip", mDeviceDescriptor.getPreconfiguredIp()); 118 json.put( 119 "preconfigured_device_num_offset", 120 mDeviceDescriptor.getPreconfiguredDeviceNumOffset()); 121 json.put("group_name", mGroupName); 122 JSONArray extraInfoKeyValuePairs = new JSONArray(); 123 for (Map.Entry<String, String> entry : mExtraInfo.entrySet()) { 124 extraInfoKeyValuePairs.put( 125 new JSONObject().put("key", entry.getKey()).put("value", entry.getValue())); 126 } 127 json.put("extra_info", extraInfoKeyValuePairs); 128 return json; 129 } 130 } 131