/** * Copyright (c) 2015 INRIA. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * - Fawaz PARAISO */ package org.occiware.clouddesigner.occi.docker.connector.dockerjava.cgroup; import org.occiware.clouddesigner.occi.docker.Container; import org.occiware.clouddesigner.occi.docker.connector.dockerjava.DockerContainerManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SuppressWarnings("all") public class CgroupManager { private static Logger LOGGER = LoggerFactory.getLogger(CgroupManager.class); private final static String cGroupPath = "/sys/fs/cgroup/"; public final static String blkio_subsystem = "blkio"; public final static String cpuset_subsystem = "cpuset"; public final static String cpu_subsystem = "cpu"; public final static String cpuacct_subsystem = "cpuacct"; public final static String devices_subsystem = "devices"; public final static String freezer_subsystem = "freezer"; public final static String memory_subsystem = "memory"; public final static String netcls_subsystem = "net_cls"; public final static String blkio_write = "blkio.throttle.write_bps_device"; public final static String blkio_read = "blkio.throttle.read_bps_device"; public final static String memory_max_mem = "memory.limit_in_bytes"; public final static String memory_swap = "memory.memsw.limit_in_bytes"; public final static String cpuset_cpus = "cpuset.cpus"; public final static String net_cls_classid = "net_cls.classid"; public final static String cpu_cfs_period = "cpu.cfs_period_us"; public final static String cpu_cfs_quota = "cpu.cfs_quota_us"; public static void SetValue(final String host, final String privateKey, final Container container, final String subsystem, final String file, final String value) { String _containerid = container.getContainerid(); String _plus = (((CgroupManager.cGroupPath + subsystem) + "/docker/") + _containerid); String _plus_1 = (_plus + "/"); final String FilePath = (_plus_1 + file); String command = ""; final DockerContainerManager dockerContainerManager = new DockerContainerManager(); boolean _equalsIgnoreCase = file.equalsIgnoreCase(CgroupManager.memory_max_mem); if (_equalsIgnoreCase) { float _parseFloat = Float.parseFloat(value); int _intValue = Float.valueOf(_parseFloat).intValue(); String _plus_2 = ("echo \'" + Integer.valueOf(_intValue)); String _plus_3 = (_plus_2 + "\' > "); String _plus_4 = (_plus_3 + FilePath); command = _plus_4; CgroupManager.LOGGER.info("EXECUTE COMMAND: {}", command); dockerContainerManager.connect(host, privateKey, command); } else { boolean _equalsIgnoreCase_1 = file.equalsIgnoreCase(CgroupManager.cpuset_cpus); if (_equalsIgnoreCase_1) { String _cpuSetGenerator = CgroupManager.cpuSetGenerator(value, container); String _plus_5 = ("echo \'" + _cpuSetGenerator); String _plus_6 = (_plus_5 + "\' > "); String _plus_7 = (_plus_6 + FilePath); command = _plus_7; CgroupManager.LOGGER.info("EXECUTE COMMAND: {}", command); dockerContainerManager.connect(host, privateKey, command); } else { boolean _equalsIgnoreCase_2 = file.equalsIgnoreCase(CgroupManager.net_cls_classid); if (_equalsIgnoreCase_2) { float _parseFloat_1 = Float.parseFloat(value); int _intValue_1 = Float.valueOf(_parseFloat_1).intValue(); String _plus_8 = ("echo \'" + Integer.valueOf(_intValue_1)); String _plus_9 = (_plus_8 + "\' > "); String _plus_10 = (_plus_9 + FilePath); command = _plus_10; CgroupManager.LOGGER.info("EXECUTE COMMAND: {}", command); dockerContainerManager.connect(host, privateKey, command); } else { boolean _equalsIgnoreCase_3 = file.equalsIgnoreCase(CgroupManager.memory_swap); if (_equalsIgnoreCase_3) { float _parseFloat_2 = Float.parseFloat(value); int _intValue_2 = Float.valueOf(_parseFloat_2).intValue(); String _plus_11 = ("echo \'" + Integer.valueOf(_intValue_2)); String _plus_12 = (_plus_11 + "\' > "); String _plus_13 = (_plus_12 + FilePath); command = _plus_13; CgroupManager.LOGGER.info("EXECUTE COMMAND: {}", command); dockerContainerManager.connect(host, privateKey, command); } } } } } public static String cpuSetGenerator(final String nbCores, final Container container) { if ((((Integer.valueOf(nbCores)).intValue() > 1) && ((Integer.valueOf(nbCores)).intValue() <= container.getCore_max()))) { String cpuSet = String.format("0-%s", nbCores); return cpuSet; } return "0"; } }