001/*
002 * VM-Operator
003 * Copyright (C) 2023 Michael N. Lipp
004 * 
005 * This program is free software: you can redistribute it and/or modify
006 * it under the terms of the GNU Affero General Public License as
007 * published by the Free Software Foundation, either version 3 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU Affero General Public License for more details.
014 *
015 * You should have received a copy of the GNU Affero General Public License
016 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
017 */
018
019package org.jdrupes.vmoperator.runner.qemu;
020
021import java.math.BigInteger;
022import java.util.Optional;
023import org.jdrupes.vmoperator.runner.qemu.commands.QmpSetBalloon;
024import org.jdrupes.vmoperator.runner.qemu.events.ConfigureQemu;
025import org.jdrupes.vmoperator.runner.qemu.events.MonitorCommand;
026import org.jgrapes.core.Channel;
027import org.jgrapes.core.Component;
028import org.jgrapes.core.annotation.Handler;
029
030/**
031 * The Class RamController.
032 */
033public class RamController extends Component {
034
035    private BigInteger currentRam;
036
037    /**
038     * Instantiates a new CPU controller.
039     *
040     * @param componentChannel the component channel
041     */
042    public RamController(Channel componentChannel) {
043        super(componentChannel);
044    }
045
046    /**
047     * On configure qemu.
048     *
049     * @param event the event
050     */
051    @Handler
052    public void onConfigureQemu(ConfigureQemu event) {
053        Optional.ofNullable(event.configuration().vm.currentRam)
054            .ifPresent(cr -> {
055                if (currentRam != null && currentRam.equals(cr)) {
056                    return;
057                }
058                currentRam = cr;
059                fire(new MonitorCommand(new QmpSetBalloon(cr)));
060            });
061    }
062
063}