89 lines
3.6 KiB
Java
89 lines
3.6 KiB
Java
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/*
|
|
* Copyright 2015 ScyllaDB
|
|
*
|
|
* Modified by ScyllaDB
|
|
*/
|
|
|
|
package org.apache.cassandra.streaming.management;
|
|
|
|
import java.net.InetAddress;
|
|
import java.net.UnknownHostException;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
|
|
import javax.management.openmbean.CompositeData;
|
|
import javax.management.openmbean.CompositeDataSupport;
|
|
import javax.management.openmbean.CompositeType;
|
|
import javax.management.openmbean.OpenDataException;
|
|
import javax.management.openmbean.OpenType;
|
|
import javax.management.openmbean.SimpleType;
|
|
|
|
import org.apache.cassandra.streaming.ProgressInfo;
|
|
|
|
import com.google.common.base.Throwables;
|
|
|
|
public class ProgressInfoCompositeData {
|
|
private static final String[] ITEM_NAMES = new String[] { "planId", "peer", "sessionIndex", "fileName", "direction",
|
|
"currentBytes", "totalBytes" };
|
|
private static final String[] ITEM_DESCS = new String[] { "String representation of Plan ID", "Session peer",
|
|
"Index of session", "Name of the file", "Direction('IN' or 'OUT')", "Current bytes transferred",
|
|
"Total bytes to transfer" };
|
|
private static final OpenType<?>[] ITEM_TYPES = new OpenType[] { SimpleType.STRING, SimpleType.STRING,
|
|
SimpleType.INTEGER, SimpleType.STRING, SimpleType.STRING, SimpleType.LONG, SimpleType.LONG };
|
|
|
|
public static final CompositeType COMPOSITE_TYPE;
|
|
static {
|
|
try {
|
|
COMPOSITE_TYPE = new CompositeType(ProgressInfo.class.getName(), "ProgressInfo", ITEM_NAMES, ITEM_DESCS,
|
|
ITEM_TYPES);
|
|
} catch (OpenDataException e) {
|
|
throw Throwables.propagate(e);
|
|
}
|
|
}
|
|
|
|
public static CompositeData toCompositeData(UUID planId, ProgressInfo progressInfo) {
|
|
Map<String, Object> valueMap = new HashMap<>();
|
|
valueMap.put(ITEM_NAMES[0], planId.toString());
|
|
valueMap.put(ITEM_NAMES[1], progressInfo.peer.getHostAddress());
|
|
valueMap.put(ITEM_NAMES[2], progressInfo.sessionIndex);
|
|
valueMap.put(ITEM_NAMES[3], progressInfo.fileName);
|
|
valueMap.put(ITEM_NAMES[4], progressInfo.direction.name());
|
|
valueMap.put(ITEM_NAMES[5], progressInfo.currentBytes);
|
|
valueMap.put(ITEM_NAMES[6], progressInfo.totalBytes);
|
|
try {
|
|
return new CompositeDataSupport(COMPOSITE_TYPE, valueMap);
|
|
} catch (OpenDataException e) {
|
|
throw Throwables.propagate(e);
|
|
}
|
|
}
|
|
|
|
public static ProgressInfo fromCompositeData(CompositeData cd) {
|
|
Object[] values = cd.getAll(ITEM_NAMES);
|
|
try {
|
|
return new ProgressInfo(InetAddress.getByName((String) values[1]), (int) values[2], (String) values[3],
|
|
ProgressInfo.Direction.valueOf((String) values[4]), (long) values[5], (long) values[6]);
|
|
} catch (UnknownHostException e) {
|
|
throw Throwables.propagate(e);
|
|
}
|
|
}
|
|
}
|