/** * Copyright 2016 Yahoo Inc. * * Licensed 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. */ package com.yahoo.pulsar.broker.loadbalance.impl; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import com.yahoo.pulsar.broker.loadbalance.LoadReport; import com.yahoo.pulsar.broker.loadbalance.ResourceDescription; import com.yahoo.pulsar.broker.loadbalance.ResourceUnit; import com.yahoo.pulsar.broker.loadbalance.ServiceRequest; import com.yahoo.pulsar.broker.loadbalance.ServiceUnit; import com.yahoo.pulsar.common.policies.data.loadbalancer.SystemResourceUsage; import com.yahoo.pulsar.common.util.ObjectMapperFactory; public class PulsarLoadReportImpl implements LoadReport { private static final Logger log = LoggerFactory.getLogger(PulsarLoadReportImpl.class); public Map<ServiceUnit, ServiceRequest> requestPerServiceUnit; private SimpleResourceUnit resourceUnit = null; private PulsarResourceDescription resourceDescription = null; private PulsarLoadReportImpl() { requestPerServiceUnit = new HashMap<ServiceUnit, ServiceRequest>(); } @Override public Map<ServiceUnit, ServiceRequest> getServiceUnitRequests() { return requestPerServiceUnit; } public static LoadReport parse(String loadReportJson) { PulsarLoadReportImpl pulsarLoadReport = new PulsarLoadReportImpl(); ObjectMapper mapper = ObjectMapperFactory.create(); try { com.yahoo.pulsar.common.policies.data.loadbalancer.LoadReport report = mapper.readValue(loadReportJson, com.yahoo.pulsar.common.policies.data.loadbalancer.LoadReport.class); SystemResourceUsage sru = report.getSystemResourceUsage(); String resourceUnitName = report.getName(); pulsarLoadReport.resourceDescription = new PulsarResourceDescription(); if (sru.bandwidthIn != null) pulsarLoadReport.resourceDescription.put("bandwidthIn", sru.bandwidthIn); if (sru.bandwidthOut != null) pulsarLoadReport.resourceDescription.put("bandwidthOut", sru.bandwidthOut); if (sru.memory != null) pulsarLoadReport.resourceDescription.put("memory", sru.memory); if (sru.cpu != null) pulsarLoadReport.resourceDescription.put("cpu", sru.cpu); pulsarLoadReport.resourceUnit = new SimpleResourceUnit(resourceUnitName, pulsarLoadReport.resourceDescription); } catch (Exception e) { log.warn("Failed Parsing Load Report from JSON string [{}]", e); } return pulsarLoadReport; } @Override public ResourceUnit getResourceUnit() { return resourceUnit; } @Override public ResourceDescription getResourceUnitDescription() { return resourceDescription; } }