第四部分:将状态数据添加到ToasterService实现(JMX Access)-数我的面包!

8 篇文章 0 订阅
8 篇文章 0 订阅

第四部分:将状态数据添加到ToasterService实现(JMX Access)-数我的面包!

用于内部统计和故障排除,我们想要去跟踪在规定时间内烤面包机做了多少片面包。我们需要一个属性,toasts-made是用来去跟踪计数和获得计数的一种方法。每当我们make-toast我们想增加toasts-made。此外,我们想要一个机制去清理toasts-made的数量。为做到这一点 ,MDSAL提供了能够定义内部状态数据和RPC调用的功能,这些功能只能通过JMX完成。

1.1 定义状态数据模型

我们将在the toaster provider服务实现中定义toasts-made统计状态数据,因为这是在 make-toast发生的。此外我们还将定义一个RPC调用:clear-toasts-made

toaster-provider-impl.yang中:

1. import rpc-context { prefix rpcx; revision-date 2013-06-17; }

1.     ...

2.     augment "/config:modules/config:module/config:state" {

3.         case toaster-provider-impl {

4.             when "/config:modules/config:module/config:type = 'toaster-provider-impl'";

5.  

6.             leaf toasts-made {

7.                 type uint32;

8.             }

9.  

10.             rpcx:rpc-context-instance "clear-toasts-made-rpc";

11.         }

12.     }

13.  

14.     identity clear-toasts-made-rpc;

15.  

16.     rpc clear-toasts-made  {

17.         description

18.           "JMX call to clear the toasts-made counter.";

19.  

20.         input {

21.             uses rpcx:rpc-context-ref {

22.                 refine context-instance {

23.                     rpcx:rpc-context-instance clear-toasts-made-rpc;

24.                 }

25.             }

26.         }

27.     }

modules/module/state结构的扩大,choice-type节点添加模式节点特定于toaster-provider-impl模块身份类型(就像“when”的条款所表示的一样)。这就是我们定义的状态信息, MD-SAL通过JMX将可用到。

toasts-made是一个简单的叶节点。clear-toasts-made的定义应简单解释一下。我们为RPC定义了一个身份,clear-toasts-made-rpc,所以它可以被引用。RPCinput重用rpc-context-ref分组和继承context-instance叶节点,引用clear-toasts-made-rpc身份。同样的,我们在状态增加子句中定义了一个结点,同样也可以引用clear-toasts-made-rpc标志。通过这种方式,我们将状态数据节点绑定给RPC

运行以下代码来生成资源。

1. mvn clean install

三个附加类在src/main/yang-gen-config目录下生成:

l ToasterProviderRuntimeMXBeanJMX bean接口,定义了getToastsMade()方法去为toasts-made属性和clearToastsMade() RPC方法提供查询。

l ToasterProviderRuntimeRegistration 具体类,包装一个ToasterProviderRuntimeMXBean注册。

l ToasterProviderRuntimeRegistrator 具体类,MDSAL一起注册一个ToasterProviderRuntimeMXBean实现。

1.2 实现状态数据模型

既然我们已经为我们的状态数据和行为定义了数据模型,我们需要为他们提供一个实现。既然OpenDaylightToaster要烤面包,我们将会实现它

ToasterProviderRuntimeMXBean为访问状态数据提供接口,所以我们要去修改OpenDaylightToaster来实现ToasterProviderRuntimeMXBean接口

1. public class OpendaylightToaster implements ToasterService, AutoCloseable, DataChangeListener, ToasterProviderRuntimeMXBean {

28.    ...

29.    private final AtomicLong toastsMade = new AtomicLong(0);

30.    ...

31.    /**

32.     * Accessor method implemented from the ToasterProviderRuntimeMXBean interface.

33.     */

34.    @Override

35.    public Long getToastsMade() {

36.        return toastsMade.get();

37.    }

38.    /**

39.     * JMX RPC call implemented from the ToasterProviderRuntimeMXBean interface.

40.     */

41.    @Override

42.    public void clearToastsMade() {

43.        LOG.info( "clearToastsMade" );

44.        toastsMade.set( 0 );

45.    }

46.    ...

47.    

48.  

49.    private class MakeToastTask implements Callable<Void> {

50.        ...

51.        @Override

52.        public Void call() throws InterruptedException {

53.            ...

54.            toastsMade.incrementAndGet();

55.            ...

56.        }

57.    }

58. }

1.3 注册ToasterProviderRuntimeMXBean服务

我们需要做注册OpendaylightToaster的最后一步。在ToasterProviderModule中我们这样做通过基类的getRootRuntimeBeanRegistratorWrapper()方法返回ToasterProviderRuntimeRegistrator来完成。

1.  public java.lang.AutoCloseable createInstance() {

59.        final OpendaylightToaster opendaylightToaster = new OpendaylightToaster();

60.        ...

61.        // Register runtimeBean for toaster statistics via JMX

62.        final ToasterProviderRuntimeRegistration runtimeReg = getRootRuntimeBeanRegistratorWrapper().register( opendaylightToaster);

63.        ...

64.        final class AutoCloseableToaster implements AutoCloseable {

65.            @Override

66.            public void close() throws Exception {

67.                ...

68.                runtimeReg.close();

69.                ...

70.            }

71.            ...

72.        }

73.    }

注意:OpendaylightToaster实例关闭时,我们还必须关闭ToasterProviderRuntimeRegistration 

1.4 通过JMX访问toasts-madeclear-toasts-made

我们可以通过MBeans由java management beans来添加toasts-made属性。你可以通过mbean平台或通过JConsole以编程的方式来访问这些。

l JConsole是每个JDK附带的实用程序,位于java主文件夹的bin目录。

l 首先,使用-jmx命令,启动控制器。

1. ./run.sh -jmx

这个命令在控制器中运行JMX服务,允许JConsole在JDK中运行。

运行JConsole,在jconsole应用下有两个按钮。

1. $JAVA_HOME/bin/jconsole

注意:路径可能会由于OS和初始化被修改。

l 通过选择应用程序连接到运行的eclipse进程,或者在远程连接对话框中指定"hostname:1088"端口。关于JMX看看这个文档的更多信息:https://wiki.opendaylight.org/images/8/89/Jconsole.pdf

l 一旦连接,导航到“mbean”选项卡。 

l  扩展org.opendaylight.controller->RuntimeBean->toaster-provider-impl->toster-provider-impl结点。

l 选择"Attributes"。现在你将会看到,您将看到显示的“ToastsMade”属性,当执行make-toast RPC call时这个属性将会被更改。

l 在你多次调用ToastsMade call之后,刷新属性并且会看到的值增加。

l 现在选择Operations,并且点击clearToastsMade按钮。

l 返回Attributes,请注意,此时计数器被设置为0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值