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