You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by ji...@apache.org on 2013/11/20 19:17:42 UTC
svn commit: r1543895 - in
/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs: ./
src/main/webapps/hdfs/ src/main/webapps/static/
Author: jing9
Date: Wed Nov 20 18:17:41 2013
New Revision: 1543895
URL: http://svn.apache.org/r1543895
Log:
HDFS-5525. Inline dust templates for new Web UI. Contributed by Haohui Mai.
Removed:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.dust.html
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer-block-info.dust.html
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.dust.html
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/pom.xml
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfs-dust.js
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.js
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.html
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/static/hadoop.css
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1543895&r1=1543894&r2=1543895&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Wed Nov 20 18:17:41 2013
@@ -202,6 +202,8 @@ Trunk (Unreleased)
HDFS-5511. improve CacheManipulator interface to allow better unit testing
(cmccabe)
+ HDFS-5525. Inline dust templates for new Web UI. (Haohui Mai via jing9)
+
OPTIMIZATIONS
HDFS-5349. DNA_CACHE and DNA_UNCACHE should be by blockId only. (cmccabe)
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/pom.xml
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/pom.xml?rev=1543895&r1=1543894&r2=1543895&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/pom.xml (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/pom.xml Wed Nov 20 18:17:41 2013
@@ -551,9 +551,6 @@ http://maven.apache.org/xsd/maven-4.0.0.
<exclude>src/main/webapps/static/dust-full-2.0.0.min.js</exclude>
<exclude>src/main/webapps/static/dust-helpers-1.1.1.min.js</exclude>
<exclude>src/main/webapps/static/jquery-1.10.2.min.js</exclude>
- <exclude>src/main/webapps/hdfs/dfshealth.dust.html</exclude>
- <exclude>src/main/webapps/hdfs/explorer-block-info.dust.html</exclude>
- <exclude>src/main/webapps/hdfs/explorer.dust.html</exclude>
</excludes>
</configuration>
</plugin>
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfs-dust.js
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfs-dust.js?rev=1543895&r1=1543894&r2=1543895&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfs-dust.js (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfs-dust.js Wed Nov 20 18:17:41 2013
@@ -60,32 +60,6 @@
$.extend(dust.filters, filters);
/**
- * Load templates from external sources in sequential orders, and
- * compile them. The loading order is important to resolve dependency.
- *
- * The code compile the templates on the client sides, which should be
- * precompiled once we introduce the infrastructure in the building
- * system.
- *
- * templates is an array of tuples in the format of {url, name}.
- */
- function load_templates(dust, templates, success_cb, error_cb) {
- if (templates.length === 0) {
- success_cb();
- return;
- }
-
- var t = templates.shift();
- $.get(t.url, function (tmpl) {
- var c = dust.compile(tmpl, t.name);
- dust.loadSource(c);
- load_templates(dust, templates, success_cb, error_cb);
- }).error(function (jqxhr, text, err) {
- error_cb(t.url, jqxhr, text, err);
- });
- }
-
- /**
* Load a sequence of JSON.
*
* beans is an array of tuples in the format of {url, name}.
@@ -110,7 +84,6 @@
});
}
- exports.load_templates = load_templates;
exports.load_json = load_json;
}($, dust, window));
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html?rev=1543895&r1=1543894&r2=1543895&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html Wed Nov 20 18:17:41 2013
@@ -36,6 +36,275 @@
<div class="col-xs-1 pull-right"><a style="color: #ddd" href="dfshealth.jsp">Legacy UI</a></div>
</div>
+<script type="text/x-dust-template" id="tmpl-dfshealth">
+<div class="page-header">
+ {#nnstat}
+ <h1>NameNode '{HostAndPort}' ({State})</h1>
+ {/nnstat}
+</div>
+
+{#nn}
+{@if cond="{DistinctVersionCount} > 1"}
+<div class="alert alert-dismissable alert-info">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+
+ There are {DistinctVersionCount} versions of datanodes currently live:
+ {#DistinctVersions}
+ {key} ({value}) {@sep},{/sep}
+ {/DistinctVersions}
+</div>
+{/if}
+
+{@if cond="{NumberOfMissingBlocks} > 0"}
+<div class="alert alert-dismissable alert-warning">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+
+ <p>There are {NumberOfMissingBlocks} missing blocks. The following files may be corrupted:</p>
+ <br/>
+ <div class="well">
+ {#CorruptFiles}
+ {.}<br/>
+ {/CorruptFiles}
+ </div>
+ <p>Please check the logs or run fsck in order to identify the missing blocks. See the Hadoop FAQ for common causes and potential solutions.</p>
+</div>
+{/if}
+{/nn}
+
+<div class="panel panel-success">
+ <div class="panel-heading">Overview</div>
+ <div class="panel-body">
+ {#nn}
+ <table class="table table-bordered">
+ <tr><th>Started:</th><td>{NNStarted}</td></tr>
+ <tr><th>Version:</th><td>{Version}</td></tr>
+ <tr><th>Compiled:</th><td>{CompileInfo}</td></tr>
+ <tr><th>Cluster ID:</th><td>{ClusterId}</td></tr>
+ <tr><th>Block Pool ID:</th><td>{BlockPoolId}</td></tr>
+ </table>
+ {/nn}
+ </div>
+</div>
+
+<p><a href="explorer.html">Browse the filesystem</a></p>
+<p><a href="/logs/">NameNode Logs</a></p>
+
+<hr/>
+
+<div class="panel panel-success">
+ <div class="panel-heading">Cluster Summary</div>
+ <div class="panel-body">
+
+ <p>
+ Security is {#nnstat}{#SecurityEnabled}on{:else}off{/SecurityEnabled}{/nnstat}.</p>
+ <p>{#nn}{#Safemode}{.}{:else}Safemode is off.{/Safemode}{/nn}</p>
+
+ <p>
+ {#fs}
+ {TotalLoad} files and directories, {BlocksTotal} blocks = {FilesTotal} total filesystem object(s).
+ {#helper_fs_max_objects/}
+ {/fs}
+ </p>
+ {#mem.HeapMemoryUsage}
+ <p>Heap Memory used {used|fmt_bytes} of {committed|fmt_bytes} Heap Memory. Max Heap Memory is {max|fmt_bytes}. </p>
+ {/mem.HeapMemoryUsage}
+
+ {#mem.NonHeapMemoryUsage}
+ <p>Non Heap Memory used {used|fmt_bytes} of {committed|fmt_bytes} Commited Non Heap Memory. Max Non Heap Memory is {max|fmt_bytes}. </p>
+ {/mem.NonHeapMemoryUsage}
+
+ {#nn}
+ <table class="table table-bordered table-striped">
+ <tr><th> Configured Capacity:</th><td>{Total|fmt_bytes}</td></tr>
+ <tr><th> DFS Used:</th><td>{Used|fmt_bytes}</td></tr>
+ <tr><th> Non DFS Used:</th><td>{NonDfsUsedSpace|fmt_bytes}</td></tr>
+ <tr><th> DFS Remaining:</th><td>{Free|fmt_bytes}</td></tr>
+ <tr><th> DFS Used%:</th><td>{PercentUsed|fmt_percentage}</td></tr>
+ <tr><th> DFS Remaining%:</th><td>{PercentRemaining|fmt_percentage}</td></tr>
+ <tr><th> Block Pool Used:</th><td>{BlockPoolUsedSpace|fmt_bytes}</td></tr>
+ <tr><th> Block Pool Used%:</th><td>{PercentBlockPoolUsed|fmt_percentage}</td></tr>
+ <tr><th> DataNodes usages% (Min/Median/Max/stdDev): </th>
+ <td>{#NodeUsage.nodeUsage}{min} / {median} / {max} / {stdDev}{/NodeUsage.nodeUsage}</td></tr>
+ {/nn}
+
+ {#fs}
+ <tr><th><a href="#nodelist-operation">Live Nodes</a></th><td>{NumLiveDataNodes} (Decommissioned: {NumDecomLiveDataNodes})</td></tr>
+ <tr><th><a href="#nodelist-operation">Dead Nodes</a></th><td>{NumDeadDataNodes} (Decommissioned: {NumDecomDeadDataNodes})</td></tr>
+ <tr><th><a href="#nodelist-decom">Decommissioning Nodes</a></th><td>{NumDecommissioningDataNodes}</td></tr>
+ <tr><th title="Excludes missing blocks.">Number of Under-Replicated Blocks</th><td>{UnderReplicatedBlocks}</td></tr>
+ {/fs}
+ </table>
+ </div>
+</div>
+
+<hr/>
+<div class="panel panel-success">
+ <div class="panel-heading">NameNode Journal Status</div>
+ <div class="panel-body">
+ <p><b>Current transaction ID:</b> {nn.JournalTransactionInfo.LastAppliedOrWrittenTxId}</p>
+ <table class="table" title="NameNode Journals">
+ <thead>
+ <tr><th>Journal Manager</th><th>State</th></tr>
+ </thead>
+ <tbody>
+ {#nn.NameJournalStatus}
+ <tr><td>{manager}</td><td>{stream}</td></tr>
+ {/nn.NameJournalStatus}
+ </tbody>
+ </table>
+ </div>
+</div>
+
+<hr/>
+<div class="panel panel-success">
+ <div class="panel-heading">NameNode Storage</div>
+ <div class="panel-body">
+ <table class="table" title="NameNode Storage">
+ <thead><tr><td><b>Storage Directory</b></td><td><b>Type</b></td><td><b>State</b></td></tr></thead>
+ {#nn.NameDirStatuses}
+ {#active}{#helper_dir_status type="Active"/}{/active}
+ {#failed}{#helper_dir_status type="Failed"/}{/failed}
+ {/nn.NameDirStatuses}
+ </table>
+ </div>
+</div>
+<hr/>
+
+<div class="panel panel-success">
+ <div class="panel-heading">Snapshot Summary</div>
+ <div class="panel-body">
+ {#fs.SnapshotStats}
+ <table class="table" title="Snapshot Summary">
+ <thead><tr><td><b>Snapshottable directories</b></td>
+ <td><b>Snapshotted directories</b></td></tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{SnapshottableDirectories}</td>
+ <td>{Snapshots}</td>
+ </tr>
+ </tbody>
+ </table>
+ {/fs.SnapshotStats}
+ </div>
+</div>
+<hr/>
+
+{#startup}
+<div class="panel panel-success">
+ <div class="panel-heading">Startup Progress</div>
+ <div class="panel-body">
+ <p>Elapsed Time: {elapsedTime|fmt_time}, Percent Complete: {percentComplete|fmt_percentage}</p>
+ <table class="table">
+ <thead>
+ <tr>
+ <th>Phase</th>
+ <th>Completion</th>
+ <th>Elapsed Time</th>
+ </tr>
+ </thead>
+ <tbody>
+ {#phases}
+ <tr class="phase">
+ <td class="startupdesc">{desc} {file} {size|fmt_bytes}</td>
+ <td>{percentComplete|fmt_percentage}</td>
+ <td>{elapsedTime|fmt_time}</td>
+ </tr>
+ {#steps root_file=file}
+ <tr class="step">
+ <td class="startupdesc">{stepDesc} {stepFile} {stepSize|fmt_bytes} ({count}/{total})</td>
+ <td>{percentComplete|fmt_percentage}</td>
+ <td></td>
+ </tr>
+ {/steps}
+ {/phases}
+ </table>
+ </div>
+</div>
+{/startup}
+
+<hr/>
+<div class="panel panel-success">
+ <div class="panel-heading">Datanode Information</div>
+ <div class="panel-body">
+ <div class="panel panel-default" id="nodelist-operation">
+ <div class="panel-heading">Nodes in operation</div>
+ <div class="panel-body">
+ <table class="table">
+ <thead>
+ <tr>
+ <th>Node</th>
+ <th>Last contact</th>
+ <th>Admin State</th>
+ <th>Capacity</th>
+ <th>Used</th>
+ <th>Non DFS Used</th>
+ <th>Remaining</th>
+ <th>Blocks</th>
+ <th>Block pool used</th>
+ <th>Failed Volumes</th>
+ </tr>
+ </thead>
+ {#nn.LiveNodes}
+ <tr>
+ <td>{name} ({xferaddr})</td>
+ <td>{lastContact}</td>
+ <td>{adminState}</td>
+ <td>{capacity|fmt_bytes}</td>
+ <td>{used|fmt_bytes}</td>
+ <td>{nonDfsUsedSpace|fmt_bytes}</td>
+ <td>{remaining|fmt_bytes}</td>
+ <td>{numBlocks}</td>
+ <td>{blockPoolUsed|fmt_bytes} ({blockPoolUsedPercent|fmt_percentage})</td>
+ <td>{volfails}</td>
+ </tr>
+ {/nn.LiveNodes}
+ {#nn.DeadNodes}
+ <tr class="danger">
+ <td>{name} ({xferaddr})</td>
+ <td>{lastContact}</td>
+ <td>Dead{?decomissioned}, Decomissioned{/decomissioned}</td>
+ <td>-</td>
+ <td>-</td>
+ <td>-</td>
+ <td>-</td>
+ <td>-</td>
+ <td>-</td>
+ <td>-</td>
+ </tr>
+ {/nn.DeadNodes}
+ </table>
+ </div>
+ </div>
+ <div class="panel panel-default" id="nodelist-decom">
+ <div class="panel-heading">Nodes being decomissioned</div>
+ <div class="panel-body">
+ <table class="table">
+ <thead>
+ <tr>
+ <th>Node</th>
+ <th>Last contact</th>
+ <th>Under replicated blocks</th>
+ <th>Blocks with no live replicas</th>
+ <th>Under Replicated Blocks <br/>In files under construction</th>
+ </tr>
+ </thead>
+ {#nn.DecomNodes}
+ <tr>
+ <td>{name} ({xferaddr})</td>
+ <td>{lastContact}</td>
+ <td>{underReplicatedBlocks}</td>
+ <td>{decommissionOnlyReplicas}</td>
+ <td>{underReplicateInOpenFiles}</td>
+ </tr>
+ {/nn.DecomNodes}
+ </table>
+ </div>
+ </div>
+ </div>
+</div>
+</script>
+
<script type="text/javascript" src="/static/jquery-1.10.2.min.js">
</script><script type="text/javascript" src="/static/bootstrap-3.0.2/js/bootstrap.min.js">
</script><script type="text/javascript" src="/static/dust-full-2.0.0.min.js">
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.js
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.js?rev=1543895&r1=1543894&r2=1543895&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.js (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.js Wed Nov 20 18:17:41 2013
@@ -39,14 +39,9 @@
var base = dust.makeBase(helpers);
- var TEMPLATES = [ { 'name': 'dfshealth', 'url': 'dfshealth.dust.html' } ];
-
- load_templates(dust, TEMPLATES, function() {
- dust.render('dfshealth', base.push(data), function(err, out) {
- $('#panel').html(out);
- });
- }, function () {
- show_err_msg('Failed to load the page.');
+ dust.loadSource(dust.compile($('#tmpl-dfshealth').html(), 'dfshealth'));
+ dust.render('dfshealth', base.push(data), function(err, out) {
+ $('#panel').html(out);
});
}
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.html
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.html?rev=1543895&r1=1543894&r2=1543895&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.html (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.html Wed Nov 20 18:17:41 2013
@@ -31,9 +31,9 @@
</div>
<div class="modal-body" id="file-info-body">
<a id="file-info-download">Download</a>
- <a id="file-info-preview" style="cursor:pointer">Tail the file (last 32K)</a>
+ <!--<a id="file-info-preview" style="cursor:pointer">Tail the file (last 32K)</a>-->
<hr />
- <div class="panel panel-info" id="file-info-blockinfo-panel">
+ <div class="panel panel-success" id="file-info-blockinfo-panel">
<div class="panel-heading">
Block information --
<select class="btn btn-default" id="file-info-blockinfo-list">
@@ -50,7 +50,7 @@
</div>
</div>
</div>
- <div class="modal-footer"><button type="button" class="btn btn-primary"
+ <div class="modal-footer"><button type="button" class="btn btn-success"
data-dismiss="modal">Close</button></div>
</div>
</div>
@@ -73,6 +73,51 @@
<br />
<div id="panel"></div>
</div>
+
+ <script type="text/x-dust-template" id="tmpl-explorer">
+ <table class="table">
+ <thead>
+ <tr>
+ <th>Permission</th>
+ <th>Owner</th>
+ <th>Group</th>
+ <th>Size</th>
+ <th>Replication</th>
+ <th>Block Size</th>
+ <th>Name</th>
+ </tr>
+ </thead>
+ <tbody>
+ {#FileStatus}
+ <tr>
+ <td>{#helper_to_permission/}</td>
+ <td>{owner}</td>
+ <td>{group}</td>
+ <td>{length|fmt_bytes}</td>
+ <td>{replication}</td>
+ <td>{blockSize|fmt_bytes}</td>
+ <td><a style="cursor:pointer" inode-type="{type}" class="explorer-browse-links" inode-path="{pathSuffix}">{pathSuffix}</a></td>
+ </tr>
+ {/FileStatus}
+ </tbody>
+ </table>
+ </script>
+
+ <script type="text/x-dust-template" id="tmpl-block-info">
+ {#block}
+ <p>Block ID: {blockId}</p>
+ <p>Block Pool ID: {blockPoolId}</p>
+ <p>Generation Stamp: {generationStamp}</p>
+ <p>Size: {numBytes}</p>
+ {/block}
+ <p>Availability:
+ <ul>
+ {#locations}
+ <li>{hostName}</li>
+ {/locations}
+ </ul>
+ </p>
+ </script>
<script type="text/javascript" src="/static/jquery-1.10.2.min.js">
</script><script type="text/javascript" src="/static/bootstrap-3.0.2/js/bootstrap.min.js">
</script><script type="text/javascript" src="/static/dust-full-2.0.0.min.js">
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js?rev=1543895&r1=1543894&r2=1543895&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/explorer.js Wed Nov 20 18:17:41 2013
@@ -164,18 +164,12 @@
function init() {
- var templates = [
- { 'name': 'explorer', 'url': 'explorer.dust.html'},
- { 'name': 'block-info', 'url': 'explorer-block-info.dust.html'}
- ];
+ dust.loadSource(dust.compile($('#tmpl-explorer').html(), 'explorer'));
+ dust.loadSource(dust.compile($('#tmpl-block-info').html(), 'block-info'));
- load_templates(dust, templates, function () {
- var b = function() { browse_directory($('#directory').val()); };
- $('#btn-nav-directory').click(b);
- browse_directory('/');
- }, function (url, jqxhr, text, err) {
- network_error_handler(url)(jqxhr, text, err);
- });
+ var b = function() { browse_directory($('#directory').val()); };
+ $('#btn-nav-directory').click(b);
+ browse_directory('/');
}
init();
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/static/hadoop.css
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/static/hadoop.css?rev=1543895&r1=1543894&r2=1543895&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/static/hadoop.css (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/static/hadoop.css Wed Nov 20 18:17:41 2013
@@ -188,3 +188,8 @@ div.security {
#startupprogress span {
font-weight: bold;
}
+
+.panel-success > .panel-heading {
+ color: #fff !important;
+ background-color: #5FA33E !important;
+}
\ No newline at end of file