1 //
2 // Copyright (c) ZeroC, Inc. All rights reserved.
3 //
4 
5 package com.zeroc.IceInternal;
6 
7 import com.zeroc.IceMX.*;
8 
9 public class InvocationObserverI
10     extends com.zeroc.IceMX.ObserverWithDelegate<com.zeroc.IceMX.InvocationMetrics,
11                                                  com.zeroc.Ice.Instrumentation.InvocationObserver>
12     implements com.zeroc.Ice.Instrumentation.InvocationObserver
13 {
14     static public final class RemoteInvocationHelper extends MetricsHelper<RemoteMetrics>
15     {
16         static private final AttributeResolver _attributes = new AttributeResolver()
17         {
18             {
19                 try
20                 {
21                     Class<?> cl = RemoteInvocationHelper.class;
22                     add("parent", cl.getDeclaredMethod("getParent"));
23                     add("id", cl.getDeclaredMethod("getId"));
24                     add("requestId", cl.getDeclaredMethod("getRequestId"));
25                     CommunicatorObserverI.addConnectionAttributes(this, RemoteInvocationHelper.class);
26                 }
27                 catch(Exception ex)
28                 {
29                     ex.printStackTrace();
30                     assert(false);
31                 }
32             }
33         };
34 
RemoteInvocationHelper(com.zeroc.Ice.ConnectionInfo con, com.zeroc.Ice.Endpoint endpt, int requestId, int size)35         RemoteInvocationHelper(com.zeroc.Ice.ConnectionInfo con, com.zeroc.Ice.Endpoint endpt, int requestId, int size)
36         {
37             super(_attributes);
38             _connectionInfo = con;
39             _endpoint = endpt;
40             _requestId = requestId;
41             _size = size;
42         }
43 
44         @Override
45         public void
initMetrics(RemoteMetrics v)46         initMetrics(RemoteMetrics v)
47         {
48             v.size += _size;
49         }
50 
51         public String
getId()52         getId()
53         {
54             if(_id == null)
55             {
56                 _id = _endpoint.toString();
57                 if(_connectionInfo.connectionId != null && !_connectionInfo.connectionId.isEmpty())
58                 {
59                     _id += " [" + _connectionInfo.connectionId + "]";
60                 }
61             }
62             return _id;
63         }
64 
65         int
getRequestId()66         getRequestId()
67         {
68             return _requestId;
69         }
70 
71         public String
getParent()72         getParent()
73         {
74             if(_connectionInfo.adapterName != null && !_connectionInfo.adapterName.isEmpty())
75             {
76                 return _connectionInfo.adapterName;
77             }
78             else
79             {
80                 return "Communicator";
81             }
82         }
83 
84         public com.zeroc.Ice.ConnectionInfo
getConnectionInfo()85         getConnectionInfo()
86         {
87             return _connectionInfo;
88         }
89 
90         public com.zeroc.Ice.Endpoint
getEndpoint()91         getEndpoint()
92         {
93             return _endpoint;
94         }
95 
96         public com.zeroc.Ice.EndpointInfo
getEndpointInfo()97         getEndpointInfo()
98         {
99             if(_endpointInfo == null)
100             {
101                 _endpointInfo = _endpoint.getInfo();
102             }
103             return _endpointInfo;
104         }
105 
106         final private com.zeroc.Ice.ConnectionInfo _connectionInfo;
107         final private com.zeroc.Ice.Endpoint _endpoint;
108         final private int _requestId;
109         final private int _size;
110         private String _id;
111         private com.zeroc.Ice.EndpointInfo _endpointInfo;
112     }
113 
114     static public final class CollocatedInvocationHelper extends MetricsHelper<CollocatedMetrics>
115     {
116         static private final AttributeResolver _attributes = new AttributeResolver()
117         {
118             {
119                 try
120                 {
121                     Class<?> cl = CollocatedInvocationHelper.class;
122                     add("parent", cl.getDeclaredMethod("getParent"));
123                     add("id", cl.getDeclaredMethod("getId"));
124                     add("requestId", cl.getDeclaredMethod("getRequestId"));
125                 }
126                 catch(Exception ex)
127                 {
128                     ex.printStackTrace();
129                     assert(false);
130                 }
131             }
132         };
133 
CollocatedInvocationHelper(com.zeroc.Ice.ObjectAdapter adapter, int requestId, int size)134         CollocatedInvocationHelper(com.zeroc.Ice.ObjectAdapter adapter, int requestId, int size)
135         {
136             super(_attributes);
137             _id = adapter.getName();
138             _requestId = requestId;
139             _size = size;
140         }
141 
142         @Override
143         public void
initMetrics(CollocatedMetrics v)144         initMetrics(CollocatedMetrics v)
145         {
146             v.size += _size;
147         }
148 
149         public String
getId()150         getId()
151         {
152             return _id;
153         }
154 
155         int
getRequestId()156         getRequestId()
157         {
158             return _requestId;
159         }
160 
161         public String
getParent()162         getParent()
163         {
164             return "Communicator";
165         }
166 
167         final private int _requestId;
168         final private int _size;
169         final private String _id;
170     }
171 
172     @Override
173     public void
userException()174     userException()
175     {
176         forEach(_userException);
177         if(_delegate != null)
178         {
179             _delegate.userException();
180         }
181     }
182 
183     @Override
184     public void
retried()185     retried()
186     {
187         forEach(_incrementRetry);
188         if(_delegate != null)
189         {
190             _delegate.retried();
191         }
192     }
193 
194     @Override
195     public com.zeroc.Ice.Instrumentation.RemoteObserver
getRemoteObserver(com.zeroc.Ice.ConnectionInfo con, com.zeroc.Ice.Endpoint edpt, int requestId, int sz)196     getRemoteObserver(com.zeroc.Ice.ConnectionInfo con, com.zeroc.Ice.Endpoint edpt, int requestId, int sz)
197     {
198         com.zeroc.Ice.Instrumentation.RemoteObserver delegate = null;
199         if(_delegate != null)
200         {
201             delegate = _delegate.getRemoteObserver(con, edpt, requestId, sz);
202         }
203         return getObserver("Remote",
204                            new RemoteInvocationHelper(con, edpt, requestId, sz),
205                            RemoteMetrics.class,
206                            RemoteObserverI.class,
207                            delegate);
208     }
209 
210     @Override
211     public com.zeroc.Ice.Instrumentation.CollocatedObserver
getCollocatedObserver(com.zeroc.Ice.ObjectAdapter adapter, int requestId, int sz)212     getCollocatedObserver(com.zeroc.Ice.ObjectAdapter adapter, int requestId, int sz)
213     {
214         com.zeroc.Ice.Instrumentation.CollocatedObserver delegate = null;
215         if(_delegate != null)
216         {
217             delegate = _delegate.getCollocatedObserver(adapter, requestId, sz);
218         }
219         return getObserver("Collocated",
220                            new CollocatedInvocationHelper(adapter, requestId, sz),
221                            CollocatedMetrics.class,
222                            CollocatedObserverI.class,
223                            delegate);
224     }
225 
226     final MetricsUpdate<InvocationMetrics> _incrementRetry = new MetricsUpdate<InvocationMetrics>()
227     {
228         @Override
229         public void
230         update(InvocationMetrics v)
231         {
232             ++v.retry;
233         }
234     };
235 
236     final MetricsUpdate<InvocationMetrics> _userException = new MetricsUpdate<InvocationMetrics>()
237     {
238         @Override
239         public void
240         update(InvocationMetrics v)
241         {
242             ++v.userException;
243         }
244     };
245 }
246