/*******************************************************************************
* Copyright (c) 2015 IBH SYSTEMS GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBH SYSTEMS GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.packagedrone.repo.manage.usage;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.annotation.HttpConstraint;
import javax.servlet.http.HttpServletRequest;
import org.eclipse.packagedrone.sec.web.controller.HttpContraintControllerInterceptor;
import org.eclipse.packagedrone.sec.web.controller.Secured;
import org.eclipse.packagedrone.sec.web.controller.SecuredControllerInterceptor;
import org.eclipse.packagedrone.web.Controller;
import org.eclipse.packagedrone.web.LinkTarget;
import org.eclipse.packagedrone.web.ModelAndView;
import org.eclipse.packagedrone.web.RequestMapping;
import org.eclipse.packagedrone.web.ViewResolver;
import org.eclipse.packagedrone.web.common.InterfaceExtender;
import org.eclipse.packagedrone.web.common.Modifier;
import org.eclipse.packagedrone.web.common.menu.MenuEntry;
import org.eclipse.packagedrone.web.controller.ControllerInterceptor;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@Controller
@Secured
@HttpConstraint ( rolesAllowed = "ADMIN" )
@ControllerInterceptor ( SecuredControllerInterceptor.class )
@ControllerInterceptor ( HttpContraintControllerInterceptor.class )
@ViewResolver ( "/WEB-INF/views/%s.jsp" )
@RequestMapping ( "/system/usage" )
public class UsageController implements InterfaceExtender
{
private static final List<MenuEntry> MAIN_ENTRIES = Collections.singletonList ( new MenuEntry ( "System", Integer.MAX_VALUE, "Usage", 6_000, LinkTarget.createFromController ( UsageController.class, "main" ), Modifier.DEFAULT, null ) );
private PingJob pingJob;
public void setPingJob ( final PingJob pingJob )
{
this.pingJob = pingJob;
}
@RequestMapping ( "/" )
public ModelAndView main ()
{
final Map<String, Object> data = new HashMap<> ( 3 );
data.put ( "enabled", this.pingJob.isActive () );
data.put ( "data", makeJson ( this.pingJob.buildStatistics () ) );
data.put ( "lastPingTimestamp", this.pingJob.getLastPing () );
return new ModelAndView ( "index", data );
}
private String makeJson ( final Statistics stats )
{
final GsonBuilder gb = new GsonBuilder ();
gb.setPrettyPrinting ();
final Gson g = gb.create ();
return g.toJson ( stats );
}
@Override
public List<MenuEntry> getMainMenuEntries ( final HttpServletRequest request )
{
if ( request.isUserInRole ( "ADMIN" ) )
{
return MAIN_ENTRIES;
}
else
{
return null;
}
}
}