blob: 941c910dcb203b6817a267b2c1c23c80eeb40a2d [file] [log] [blame]
Jordi Ortiz1d8cc492017-01-27 14:28:53 +01001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Jordi Ortiz1d8cc492017-01-27 14:28:53 +01003 *
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 */
16package org.onosproject.cli.net;
17
Ray Milkeyd84f89b2018-08-17 14:54:17 -070018import org.apache.karaf.shell.api.action.Argument;
19import org.apache.karaf.shell.api.action.Command;
Ray Milkey0068fd02018-10-11 15:45:39 -070020import org.apache.karaf.shell.api.action.Completion;
pierventrec0914ec2021-08-27 15:25:02 +020021import org.apache.karaf.shell.api.action.Option;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070022import org.apache.karaf.shell.api.action.lifecycle.Service;
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010023import org.onosproject.cli.AbstractShellCommand;
24import org.onosproject.core.CoreService;
25import org.onosproject.net.DeviceId;
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010026import org.onosproject.net.meter.DefaultMeterRequest;
pierventrec0914ec2021-08-27 15:25:02 +020027import org.onosproject.net.meter.MeterCellId;
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010028import org.onosproject.net.meter.MeterId;
29import org.onosproject.net.meter.MeterRequest;
pierventrec0914ec2021-08-27 15:25:02 +020030import org.onosproject.net.meter.MeterScope;
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010031import org.onosproject.net.meter.MeterService;
pierventrec0914ec2021-08-27 15:25:02 +020032import org.onosproject.net.pi.model.PiMeterId;
33import org.onosproject.net.pi.runtime.PiMeterCellId;
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010034
pierventrec0914ec2021-08-27 15:25:02 +020035import static com.google.common.base.Strings.isNullOrEmpty;
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010036
37/**
38 * Remove existing meter from device.
39 */
Ray Milkeyd84f89b2018-08-17 14:54:17 -070040@Service
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010041@Command(scope = "onos", name = "meter-remove",
42 description = "Removes a meter from a device (currently for testing)")
43public class MeterRemoveCommand extends AbstractShellCommand {
44
45 @Argument(index = 0, name = "uri", description = "Device ID",
46 required = true, multiValued = false)
Ray Milkey0068fd02018-10-11 15:45:39 -070047 @Completion(DeviceIdCompleter.class)
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010048 private String uri = null;
49
pierventrec0914ec2021-08-27 15:25:02 +020050 @Argument(index = 1, name = "index", description = "Index",
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010051 required = true, multiValued = false)
pierventrec0914ec2021-08-27 15:25:02 +020052 private String indexString = null;
53
54 @Option(name = "-sc", aliases = "--scope", description = "Scope",
55 required = false, multiValued = false)
56 private String scopeString = null;
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010057
58 private final String appId = "org.onosproject.cli.meterCmd";
59
60 @Override
Ray Milkeyd84f89b2018-08-17 14:54:17 -070061 protected void doExecute() {
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010062 MeterService service = get(MeterService.class);
63 CoreService coreService = get(CoreService.class);
64
65 DeviceId deviceId = DeviceId.deviceId(uri);
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010066
pierventrec0914ec2021-08-27 15:25:02 +020067 MeterScope scope = MeterScope.globalScope();
68 if (!isNullOrEmpty(scopeString)) {
69 scope = MeterScope.of(scopeString);
70 }
71
72 MeterCellId meterCellId;
73 long index = Long.parseLong(indexString);
74 if (scope.equals(MeterScope.globalScope())) {
75 meterCellId = MeterId.meterId(index);
76 } else {
77 meterCellId = PiMeterCellId.ofIndirect(PiMeterId.of(scope.id()), index);
78 }
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010079
80 MeterRequest.Builder builder = DefaultMeterRequest.builder()
81 .forDevice(deviceId)
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010082 .fromApp(coreService.registerApplication(appId));
83 MeterRequest meterRequest = builder.remove();
pierventrec0914ec2021-08-27 15:25:02 +020084 service.withdraw(builder.remove(), meterCellId);
Jordi Ortiz1002b0a2017-02-27 14:25:49 +010085
pierventrec0914ec2021-08-27 15:25:02 +020086 log.info("Requested meter {} removal: {}", meterCellId.toString(), meterRequest.toString());
87 print("Requested meter %s removal: %s", meterCellId.toString(), meterRequest.toString());
Jordi Ortiz1d8cc492017-01-27 14:28:53 +010088 }
89}