James Moger
2011-11-01 c25a1d65ed2c94b65741d81862a7612ae12bdf76
commit | author | age
486ee1 1 /*
JM 2  * Copyright 2011 gitblit.com.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.gitblit.client;
17
18 import java.awt.BorderLayout;
19 import java.awt.Dimension;
20 import java.awt.FlowLayout;
21 import java.awt.Font;
22 import java.awt.GridLayout;
23 import java.awt.Insets;
38688b 24 import java.awt.event.ActionEvent;
JM 25 import java.awt.event.ActionListener;
26 import java.io.IOException;
486ee1 27
38688b 28 import javax.swing.JButton;
486ee1 29 import javax.swing.JLabel;
JM 30 import javax.swing.JPanel;
31 import javax.swing.JScrollPane;
32 import javax.swing.JTable;
33
8e40cd 34 import com.gitblit.Constants;
38688b 35 import com.gitblit.Constants.RpcRequest;
486ee1 36 import com.gitblit.models.ServerStatus;
JM 37 import com.gitblit.utils.ByteFormat;
8e40cd 38 import com.gitblit.utils.TimeUtils;
486ee1 39
JM 40 /**
41  * This panel displays the server status.
42  * 
43  * @author James Moger
44  */
45 public class StatusPanel extends JPanel {
46
47     private static final long serialVersionUID = 1L;
38688b 48     private final GitblitClient gitblit;
486ee1 49     private JLabel bootDate;
3f5a93 50     private JLabel url;
486ee1 51     private JLabel servletContainer;
JM 52     private JLabel heapMaximum;
53     private JLabel heapAllocated;
54     private JLabel heapUsed;
38688b 55     private PropertiesTableModel tableModel;
JM 56     private HeaderPanel header;
8e40cd 57     private JLabel version;
JM 58     private JLabel releaseDate;
486ee1 59
38688b 60     public StatusPanel(GitblitClient gitblit) {
486ee1 61         super();
38688b 62         this.gitblit = gitblit;
486ee1 63         initialize();
JM 64     }
65
66     private void initialize() {
38688b 67         JButton refreshStatus = new JButton(Translation.get("gb.refresh"));
JM 68         refreshStatus.addActionListener(new ActionListener() {
69             public void actionPerformed(ActionEvent e) {
70                 refreshStatus();
71             }
72         });
73
8e40cd 74         version = new JLabel();
JM 75         releaseDate = new JLabel();
486ee1 76         bootDate = new JLabel();
3f5a93 77         url = new JLabel();
486ee1 78         servletContainer = new JLabel();
JM 79
80         heapMaximum = new JLabel();
81         heapAllocated = new JLabel();
82         heapUsed = new JLabel();
83
38688b 84         JPanel fieldsPanel = new JPanel(new GridLayout(0, 1, 0, Utils.MARGIN)) {
3f5a93 85
8e40cd 86             private static final long serialVersionUID = 1L;
JM 87
88             @Override
89             public Insets getInsets() {
38688b 90                 return Utils.INSETS;
8e40cd 91             }
JM 92         };
93         fieldsPanel.add(createFieldPanel("gb.version", version));
94         fieldsPanel.add(createFieldPanel("gb.releaseDate", releaseDate));
486ee1 95         fieldsPanel.add(createFieldPanel("gb.bootDate", bootDate));
3f5a93 96         fieldsPanel.add(createFieldPanel("gb.url", url));
486ee1 97         fieldsPanel.add(createFieldPanel("gb.servletContainer", servletContainer));
JM 98         fieldsPanel.add(createFieldPanel("gb.heapUsed", heapUsed));
99         fieldsPanel.add(createFieldPanel("gb.heapAllocated", heapAllocated));
100         fieldsPanel.add(createFieldPanel("gb.heapMaximum", heapMaximum));
101
38688b 102         tableModel = new PropertiesTableModel();
JM 103         JTable propertiesTable = Utils.newTable(tableModel, Utils.DATE_FORMAT);
486ee1 104         String name = propertiesTable.getColumnName(PropertiesTableModel.Columns.Name.ordinal());
JM 105         NameRenderer nameRenderer = new NameRenderer();
106         propertiesTable.setRowHeight(nameRenderer.getFont().getSize() + 8);
107         propertiesTable.getColumn(name).setCellRenderer(nameRenderer);
108
109         JPanel centerPanel = new JPanel(new BorderLayout());
110         centerPanel.add(fieldsPanel, BorderLayout.NORTH);
111         centerPanel.add(new JScrollPane(propertiesTable), BorderLayout.CENTER);
112
38688b 113         JPanel controls = new JPanel();
JM 114         controls.add(refreshStatus);
115
116         header = new HeaderPanel(Translation.get("gb.status"), "health_16x16.png");
486ee1 117         setLayout(new BorderLayout());
38688b 118         add(header, BorderLayout.NORTH);
486ee1 119         add(centerPanel, BorderLayout.CENTER);
38688b 120         add(controls, BorderLayout.SOUTH);
486ee1 121     }
JM 122
123     private JPanel createFieldPanel(String key, JLabel valueLabel) {
38688b 124         JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, Utils.MARGIN, 0));
486ee1 125         JLabel textLabel = new JLabel(Translation.get(key));
JM 126         textLabel.setFont(textLabel.getFont().deriveFont(Font.BOLD));
8e40cd 127         textLabel.setPreferredSize(new Dimension(120, 10));
486ee1 128         panel.add(textLabel);
JM 129         panel.add(valueLabel);
130         return panel;
131     }
132
133     @Override
134     public Insets getInsets() {
38688b 135         return Utils.INSETS;
486ee1 136     }
JM 137
38688b 138     protected void refreshStatus() {
JM 139         GitblitWorker worker = new GitblitWorker(StatusPanel.this, RpcRequest.LIST_STATUS) {
140             @Override
141             protected Boolean doRequest() throws IOException {
142                 gitblit.refreshStatus();
143                 return true;
144             }
145
146             @Override
147             protected void onSuccess() {
148                 updateTable(false);
149             }
150         };
151         worker.execute();
152     }
153
154     protected void updateTable(boolean pack) {
155         ServerStatus status = gitblit.getStatus();
156         header.setText(Translation.get("gb.status"));
8e40cd 157         version.setText(Constants.NAME + (status.isGO ? " GO v" : " WAR v") + status.version);
JM 158         releaseDate.setText(status.releaseDate);
159         bootDate.setText(status.bootDate.toString() + " (" + TimeUtils.timeAgo(status.bootDate)
160                 + ")");
38688b 161         url.setText(gitblit.url);
486ee1 162         servletContainer.setText(status.servletContainer);
JM 163         ByteFormat byteFormat = new ByteFormat();
164         heapMaximum.setText(byteFormat.format(status.heapMaximum));
165         heapAllocated.setText(byteFormat.format(status.heapAllocated));
166         heapUsed.setText(byteFormat.format(status.heapAllocated - status.heapFree) + " ("
167                 + byteFormat.format(status.heapFree) + " " + Translation.get("gb.free") + ")");
38688b 168         tableModel.setProperties(status.systemProperties);
JM 169         tableModel.fireTableDataChanged();
486ee1 170     }
JM 171 }