blob: a5b4eb5aff86f7920c3e28bb5de7b770e5317333 [file] [log] [blame]
Erik Kline5b25a0f2016-04-12 15:31:13 +09001/*
2 * Copyright (C) 2016 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
17package android.net.metrics;
18
Hugo Benichicf6b12f2016-07-04 11:28:05 +090019import android.annotation.IntDef;
Hugo Benichi4b6dfc22016-04-15 12:15:47 +090020import android.annotation.SystemApi;
Erik Kline5b25a0f2016-04-12 15:31:13 +090021import android.os.Parcel;
22import android.os.Parcelable;
Hugo Benichi5df9d722016-04-25 17:16:35 +090023import android.util.SparseArray;
24
25import com.android.internal.util.MessageUtils;
Erik Kline5b25a0f2016-04-12 15:31:13 +090026
Hugo Benichicf6b12f2016-07-04 11:28:05 +090027import java.lang.annotation.Retention;
28import java.lang.annotation.RetentionPolicy;
29
Erik Kline5b25a0f2016-04-12 15:31:13 +090030/**
Hugo Benichicf6b12f2016-07-04 11:28:05 +090031 * An event recorded by IpManager when IP provisioning completes for a network or
32 * when a network disconnects.
Erik Kline5b25a0f2016-04-12 15:31:13 +090033 * {@hide}
34 */
Hugo Benichi4b6dfc22016-04-15 12:15:47 +090035@SystemApi
Hugo Benichicfddd682016-05-31 16:28:06 +090036public final class IpManagerEvent implements Parcelable {
Hugo Benichi5df9d722016-04-25 17:16:35 +090037
38 public static final int PROVISIONING_OK = 1;
39 public static final int PROVISIONING_FAIL = 2;
40 public static final int COMPLETE_LIFECYCLE = 3;
41
Hugo Benichicf6b12f2016-07-04 11:28:05 +090042 /** {@hide} */
43 @IntDef(value = {PROVISIONING_OK, PROVISIONING_FAIL, COMPLETE_LIFECYCLE})
44 @Retention(RetentionPolicy.SOURCE)
45 public @interface EventType {}
46
Hugo Benichi627b4242016-04-15 16:56:28 +090047 public final String ifName;
Hugo Benichicf6b12f2016-07-04 11:28:05 +090048 public final @EventType int eventType;
Hugo Benichi627b4242016-04-15 16:56:28 +090049 public final long durationMs;
Erik Kline5b25a0f2016-04-12 15:31:13 +090050
Hugo Benichicfddd682016-05-31 16:28:06 +090051 /** {@hide} */
Hugo Benichicf6b12f2016-07-04 11:28:05 +090052 public IpManagerEvent(String ifName, @EventType int eventType, long duration) {
Hugo Benichi627b4242016-04-15 16:56:28 +090053 this.ifName = ifName;
Hugo Benichi5df9d722016-04-25 17:16:35 +090054 this.eventType = eventType;
Hugo Benichi627b4242016-04-15 16:56:28 +090055 this.durationMs = duration;
Erik Kline5b25a0f2016-04-12 15:31:13 +090056 }
57
Hugo Benichi627b4242016-04-15 16:56:28 +090058 private IpManagerEvent(Parcel in) {
59 this.ifName = in.readString();
Hugo Benichi5df9d722016-04-25 17:16:35 +090060 this.eventType = in.readInt();
Hugo Benichi627b4242016-04-15 16:56:28 +090061 this.durationMs = in.readLong();
Erik Kline5b25a0f2016-04-12 15:31:13 +090062 }
63
Hugo Benichicf6b12f2016-07-04 11:28:05 +090064 @Override
Erik Kline5b25a0f2016-04-12 15:31:13 +090065 public void writeToParcel(Parcel out, int flags) {
Hugo Benichi627b4242016-04-15 16:56:28 +090066 out.writeString(ifName);
Hugo Benichi5df9d722016-04-25 17:16:35 +090067 out.writeInt(eventType);
Hugo Benichi627b4242016-04-15 16:56:28 +090068 out.writeLong(durationMs);
69 }
70
Hugo Benichicf6b12f2016-07-04 11:28:05 +090071 @Override
Hugo Benichi627b4242016-04-15 16:56:28 +090072 public int describeContents() {
73 return 0;
Erik Kline5b25a0f2016-04-12 15:31:13 +090074 }
75
76 public static final Parcelable.Creator<IpManagerEvent> CREATOR
77 = new Parcelable.Creator<IpManagerEvent>() {
78 public IpManagerEvent createFromParcel(Parcel in) {
79 return new IpManagerEvent(in);
80 }
81
82 public IpManagerEvent[] newArray(int size) {
83 return new IpManagerEvent[size];
84 }
85 };
86
87 public static void logEvent(int eventType, String ifName, long durationMs) {
Hugo Benichi5df9d722016-04-25 17:16:35 +090088 }
89
90 @Override
91 public String toString() {
92 return String.format("IpManagerEvent(%s, %s, %dms)",
93 ifName, Decoder.constants.get(eventType), durationMs);
94 }
95
96 final static class Decoder {
97 static final SparseArray<String> constants = MessageUtils.findMessageNames(
98 new Class[]{IpManagerEvent.class}, new String[]{"PROVISIONING_", "COMPLETE_"});
Erik Kline5b25a0f2016-04-12 15:31:13 +090099 }
Hugo Benichicfddd682016-05-31 16:28:06 +0900100}