summaryrefslogtreecommitdiff
path: root/java/src/IceMX/InvocationObserverI.java
blob: b581cb1723c5359d8df3f6ba94c34e5b3b63052d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// **********************************************************************
//
// Copyright (c) 2003-2012 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************

package IceMX;

public class InvocationObserverI extends Observer<InvocationMetrics> implements Ice.Instrumentation.InvocationObserver
{
    static private final class RemoteInvocationHelper extends MetricsHelper<Metrics>
    {
        static private final AttributeResolver _attributes = new AttributeResolver()
            { 
                {
                    try
                    {
                        Class<?> cl = RemoteInvocationHelper.class;
                        add("parent", cl.getDeclaredMethod("getParent"));
                        add("id", cl.getDeclaredMethod("getId"));
                        add("endpoint", cl.getDeclaredMethod("getEndpoint"));
                        CommunicatorObserverI.addConnectionAttributes(this, RemoteInvocationHelper.class);
                    }
                    catch(Exception ex)
                    {
                        ex.printStackTrace();
                        assert(false);
                    }
                }
            };

        RemoteInvocationHelper(Ice.ConnectionInfo con, Ice.Endpoint endpt) 
        {
            super(_attributes);
            _connectionInfo = con;
            _endpoint = endpt;
        }

        String
        getId()
        {
            if(_id == null)
            {
                _id = _endpoint.toString();
                if(_connectionInfo.connectionId != null && !_connectionInfo.connectionId.isEmpty())
                {
                    _id += " [" + _connectionInfo.connectionId + "]";
                }
            }
            return _id;
        }
    
        String 
        getParent()
        {
            if(_connectionInfo.adapterName != null && !_connectionInfo.adapterName.isEmpty())
            {
                return _connectionInfo.adapterName;
            }
            else
            {
                return "Communicator";
            }
        }
        
        Ice.ConnectionInfo
        getConnectionInfo()
        {
            return _connectionInfo;
        }
        
        Ice.Endpoint
        getEndpoint()
        {
            return _endpoint;
        }

        Ice.EndpointInfo
        getEndpointInfo()
        {
            if(_endpointInfo == null)
            {
                _endpointInfo = _endpoint.getInfo();
            }
            return _endpointInfo;
        }
    
        final private Ice.ConnectionInfo _connectionInfo;
        final private Ice.Endpoint _endpoint;
        private String _id;
        private Ice.EndpointInfo _endpointInfo;
    };

    public void
    retried()
    {
        forEach(_incrementRetry);
    }
    
    public Observer 
    getRemoteObserver(Ice.ConnectionInfo con, Ice.Endpoint endpt)
    {
        return getObserver("Remote", new RemoteInvocationHelper(con, endpt), Metrics.class, ObserverI.class);
    }

    final MetricsUpdate<InvocationMetrics> _incrementRetry = new MetricsUpdate<InvocationMetrics>()
        {
            public void
            update(InvocationMetrics v)
            {
                ++v.retry;
            }
        };
}