001package org.javasimon.spring.webmvc;
002
003import org.javasimon.Manager;
004import org.javasimon.source.AbstractStopwatchSource;
005
006import org.springframework.web.method.HandlerMethod;
007
008/**
009 * Stopwatch source for Spring MVC handlers.
010 *
011 * @author gquintana
012 */
013public class HandlerStopwatchSource extends AbstractStopwatchSource<HandlerLocation> {
014        /**
015         * Prefix used for Simon names.
016         */
017        private static final String PREFIX = "org.javasimon.mvc";
018
019        /**
020         * Suffix used for Simon names of Controllers.
021         */
022        private static final String CONTROLLER_SUFFIX = "ctrl";
023
024        /**
025         * Suffix used for Simon names of Views.
026         */
027        private static final String VIEW_SUFFIX = "view";
028
029        public HandlerStopwatchSource(Manager manager) {
030                super(manager);
031        }
032
033        @Override
034        protected String getMonitorName(HandlerLocation t) {
035                StringBuilder stringBuilder = new StringBuilder(PREFIX).append(".");
036                // Append controller type
037                if (t.getHandler() instanceof HandlerMethod) {
038                        HandlerMethod handlerMethod = (HandlerMethod) t.getHandler();
039                        stringBuilder.append(handlerMethod.getBeanType().getSimpleName())
040                                .append(".").append(handlerMethod.getMethod().getName());
041                } else {
042                        stringBuilder.append(t.getHandler().getClass().getSimpleName());
043                }
044                // Append step
045                stringBuilder.append(".");
046                switch (t.getStep()) {
047                        case CONTROLLER:
048                                stringBuilder.append(CONTROLLER_SUFFIX);
049                                break;
050                        case VIEW:
051                                stringBuilder.append(VIEW_SUFFIX);
052                                break;
053                }
054                return stringBuilder.toString();
055        }
056}