001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.wicket.devutils.inspector; 018 019import java.io.Serializable; 020import java.text.SimpleDateFormat; 021import java.util.ArrayList; 022import java.util.List; 023 024import org.apache.wicket.Application; 025import org.apache.wicket.devutils.DevUtilsPage; 026import org.apache.wicket.markup.html.WebMarkupContainer; 027import org.apache.wicket.markup.html.basic.Label; 028import org.apache.wicket.markup.html.image.NonCachingImage; 029import org.apache.wicket.markup.html.list.ListItem; 030import org.apache.wicket.markup.html.list.PageableListView; 031import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; 032import org.apache.wicket.model.IModel; 033import org.apache.wicket.model.Model; 034import org.apache.wicket.protocol.http.IRequestLogger; 035import org.apache.wicket.protocol.http.IRequestLogger.RequestData; 036import org.apache.wicket.protocol.http.IRequestLogger.SessionData; 037import org.apache.wicket.protocol.http.RequestLogger; 038import org.apache.wicket.protocol.http.WebApplication; 039import org.apache.wicket.util.lang.Bytes; 040 041/** 042 * @author jcompagner 043 */ 044public class RequestsPage extends DevUtilsPage 045{ 046 private static final long serialVersionUID = 1L; 047 private final SimpleDateFormat sdf = new SimpleDateFormat("dd MMM hh:mm:ss.SSS"); 048 049 /** 050 * Construct. 051 * 052 * @param sessionData 053 */ 054 public RequestsPage(final SessionData sessionData) 055 { 056 add(new NonCachingImage("bug")); 057 if (sessionData == null) 058 { 059 add(new Label("id").setVisible(false)); 060 add(new Label("sessionInfo").setVisible(false)); 061 add(new Label("startDate").setVisible(false)); 062 add(new Label("lastRequestTime").setVisible(false)); 063 add(new Label("numberOfRequests").setVisible(false)); 064 add(new Label("totalTimeTaken").setVisible(false)); 065 add(new Label("size").setVisible(false)); 066 add(new WebMarkupContainer("sessionid")); 067 } 068 else 069 { 070 add(new Label("id", new Model<>(sessionData.getSessionId()))); 071 add(new Label("sessionInfo", new Model<>( 072 (Serializable)sessionData.getSessionInfo()))); 073 add(new Label("startDate", new Model<>(sdf.format(sessionData.getStartDate())))); 074 add(new Label("lastRequestTime", new Model<>( 075 sdf.format(sessionData.getLastActive())))); 076 add(new Label("numberOfRequests", new Model<>(sessionData.getNumberOfRequests()))); 077 add(new Label("totalTimeTaken", new Model<>(sessionData.getTotalTimeTaken()))); 078 add(new Label("size", new Model<>(Bytes.bytes(sessionData.getSessionSize())))); 079 add(new WebMarkupContainer("sessionid").setVisible(false)); 080 } 081 082 IModel<List<RequestData>> requestsModel = new IModel<List<RequestData>>() 083 { 084 private static final long serialVersionUID = 1L; 085 086 @Override 087 public ArrayList<RequestData> getObject() 088 { 089 List<RequestData> requests = getRequestLogger().getRequests(); 090 if (sessionData != null) 091 { 092 ArrayList<RequestData> returnValues = new ArrayList<>(); 093 for (RequestData data : requests) 094 { 095 if (sessionData.getSessionId().equals(data.getSessionId())) 096 { 097 returnValues.add(data); 098 } 099 } 100 return returnValues; 101 } 102 return new ArrayList<>(requests); 103 } 104 }; 105 PageableListView<RequestData> listView = new PageableListView<RequestData>("requests", 106 requestsModel, 50) 107 { 108 private static final long serialVersionUID = 1L; 109 110 @Override 111 protected void populateItem(final ListItem<RequestData> item) 112 { 113 RequestData rd = item.getModelObject(); 114 item.add(new Label("id", new Model<>(rd.getSessionId())).setVisible(sessionData == null)); 115 item.add(new Label("startDate", new Model<>(sdf.format(rd.getStartDate())))); 116 item.add(new Label("timeTaken", new Model<>(rd.getTimeTaken()))); 117 String eventTarget = rd.getEventTarget() != null ? rd.getEventTarget() 118 .getClass() 119 .getName() : ""; 120 item.add(new Label("eventTarget", new Model<>(eventTarget))); 121 String responseTarget = rd.getResponseTarget() != null ? rd.getResponseTarget() 122 .getClass() 123 .getName() : ""; 124 item.add(new Label("responseTarget", new Model<>(responseTarget))); 125 item.add(new Label("alteredObjects", new Model<>(rd.getAlteredObjects())).setEscapeModelStrings(false)); 126 item.add(new Label("sessionSize", new Model<>(Bytes.bytes(rd.getSessionSize())))); 127 } 128 }; 129 add(listView); 130 131 PagingNavigator navigator = new PagingNavigator("navigator", listView); 132 add(navigator); 133 } 134 135 IRequestLogger getRequestLogger() 136 { 137 WebApplication webApplication = (WebApplication)Application.get(); 138 139 IRequestLogger requestLogger = webApplication.getRequestLogger(); 140 141 if (webApplication.getRequestLogger() == null) 142 requestLogger = new RequestLogger(); 143 return requestLogger; 144 } 145}