Subversion Repositories ALCASAR

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>nfsen-ng</title>
        <script src="js/jquery.min.js"></script>
        <script src="js/popper.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
        <script src="js/ion.rangeSlider.min.js"></script>
        <script src="js/dygraph.min.js"></script>
        <script src="js/footable.min.js"></script>
        <link rel="stylesheet" type="text/css" href="css/dygraph.css" />
        <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" />
        <link rel="stylesheet" type="text/css" href="css/ion.rangeSlider.css" />
        <link rel="stylesheet" type="text/css" href="css/footable.bootstrap.min.css" />
        <link rel="stylesheet" type="text/css" href="css/nfsen-ng.css" />
    </head>

    <body class="p-2">
        <header>
            <a class="position-absolute link-secondary" style="text-decoration: none;" href="https://github.com/mbolli/nfsen-ng" target="_blank">
                nfsen-ng <span id="version"></span>
            </a>
            <ul id="viewList" class="nav nav-tabs justify-content-end" role="tablist">
                <li role="presentation" class="nav-item align-self-center">
                    <a href="#" class="reload px-3"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-house-door-fill" viewBox="0 0 16 16">
                        <path d="M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5"/>
                    </svg></a>
                </li>
                <li role="presentation" class="nav-item">
                    <a class="nav-link active" data-view="graphs" href="#">Graphs <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-graph-up" viewBox="0 0 16 16">NT>
                        <path fill-rule="evenodd" d="M0 0h1v15h15v1H0zm14.817 3.113a.5.5 0 0 1 .07.704l-4.5 5.5a.5.5 0 0 1-.74.037L7.06 6.767l-3.656 5.027a.5.5 0 0 1-.808-.588l4-5.5a.5.5 0 0 1 .758-.06l2.609 2.61 4.15-5.073a.5.5 0 0 1 .704-.07"/>
                    </svg>
                    </a>
                </li>
                <li role="presentation" class="nav-item">
                    <a class="nav-link" data-view="flows" href="#">Flows <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-zoom-in" viewBox="0 0 16 16">
                        <path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11M13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0"/>
                        <path d="M10.344 11.742q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1 6.5 6.5 0 0 1-1.398 1.4z"/>
                        <path fill-rule="evenodd" d="M6.5 3a.5.5 0 0 1 .5.5V6h2.5a.5.5 0 0 1 0 1H7v2.5a.5.5 0 0 1-1 0V7H3.5a.5.5 0 0 1 0-1H6V3.5a.5.5 0 0 1 .5-.5"/>
                    </svg>
                    </a>
                </li>
                <li role="presentation" class="nav-item">
                    <a class="nav-link" data-view="statistics" href="#">Statistics <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list-columns" viewBox="0 0 16 16">;
                        <path fill-rule="evenodd" d="M0 .5A.5.5 0 0 1 .5 0h9a.5.5 0 0 1 0 1h-9A.5.5 0 0 1 0 .5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2A.5.5 0 0 1 .5 2h8a.5.5 0 0 1 0 1h-8a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2A.5.5 0 0 1 .5 4h10a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2A.5.5 0 0 1 .5 6h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2A.5.5 0 0 1 .5 8h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5"/>
                    </svg>
                    </a>
                </li>
                <li role="presentation" class="nav-item">
                    <a class="nav-link" data-view="config" href="#">Config ⚙️
                    </a>
                </li>
            </ul>
        </header>
        <div id="filterContainer" class="container-fluid tab-content">
            <form autocomplete="off">
                <div id="filter" class="filter row align-items-start bg-light border-bottom py-3" style="flex-direction: row">
                    <div class="date_selection col-12 p-3 mb-4 border-bottom">
                        <div class="mb-3">
                            <input type="text" name="date_range" id="date_range"/>
                        </div>

                        <div class="float-end">
                        <div class="btn-group" id="date_slot" data-bs-toggle="buttons">
                            <input type="radio" class="btn-check" name="range" data-unit="h" id="dateSlotH" value="3600000">
                            <label class="btn btn-outline-primary" for="dateSlotH">1 hour</label>
                            <input type="radio" class="btn-check" name="range" data-unit="d" id="dateSlotD" value="86400000">
                            <label class="btn btn-outline-primary" for="dateSlotD">24 hours</label>
                            <input type="radio" class="btn-check" name="range" data-unit="w" id="dateSlotW" value="604800000">
                            <label class="btn btn-outline-primary" for="dateSlotW">Week</label>
                            <input type="radio" class="btn-check" name="range" data-unit="m" id="dateSlotM" value="2592000000">
                            <label class="btn btn-outline-primary" for="dateSlotM">Month</label>
                            <input type="radio" class="btn-check" name="range" data-unit="y" id="dateSlotY" value="31536000000">
                            <label class="btn btn-outline-primary" for="dateSlotY">Year</label>
                        </div>

                        <div class="btn-group" id="date_slot_nav">
                            <button type="button" class="btn btn-outline-primary prev" disabled><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-left" viewBox="0 0 16 16">
                                <path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"/>
                            </svg></button>
                            <button type="button" class="btn btn-outline-primary next" disabled><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-right" viewBox="0 0 16 16">
                                <path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"/>
                            </svg></button>
                        </div>

                        <div class="btn-group" id="date_syncing" data-view="graphs">
                            <button type="button" class="btn btn-outline-primary sync-date" disabled>Copy from graph <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-repeat" viewBox="0 0 16 16">
                                <path d="M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41m-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9"/>
                                <path fill-rule="evenodd" d="M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5 5 0 0 0 8 3M3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9z"/>
                            </svg></button>
                        </div>
                        </div>
                    </div>

                    <div class="d-none col-xs-6 col-sm-2" data-view="config">
                    <ul>
                    <li>
                    Config <a href="../api/config">/api/config</a>
                    </li>
                    <li>
                        Theme
                        <a href="javascript:window.localStorage.setItem('theme', 'light')">Light</a>
                        <a href="javascript:window.localStorage.setItem('theme', 'dark')">Dark</a>
                    </li>

                    <script>
                    var theme = window.localStorage.getItem("theme");
                    var styleId = document.styleSheets.length - 1;
                    var ruleId = 2;
                    switch (theme)
                    {
                        case "light": document.styleSheets[styleId].rules[ruleId].style.filter="invert(0.0)"; break;;
                        case "dark": document.styleSheets[styleId].rules[ruleId].style.filter="invert(0.9)"; break;;
                    }
                    </script>
                    </div>

                    <div id="filterDisplay" class="d-none col-xs-6 col-sm-2" data-view="graphs">
                        <p class="h6">Display</p>

                        <div class="form-group">
                            <select id="filterDisplaySelect" class="form-control form-select">
                                <option value="sources">Sources</option>
                                <option value="protocols">Protocols</option>
                                <option value="ports">Ports</option>
                            </select>
                        </div>
                    </div>

                    <div id="filterPorts" class="d-none col-xs-6 col-sm-2 col-md-1" data-view="graphs" data-display="ports">
                        <p class="h6">Ports</p>

                        <div class="form-group">
                            <select id="filterPortsSelect" multiple class="form-control form-select"></select>
                        </div>
                    </div>

                    <div id="filterSources" class="d-none col-xs-6 col-sm-3 col-md-2" data-view="graphs flows statistics" data-display="sources protocols ports">
                        <p class="h6">Sources</p>

                        <div class="form-group">
                            <select  id="filterSourcesSelect" multiple class="form-control form-select">
                                <option value="any">Any</option>
                            </select>
                        </div>
                    </div>

                    <div id="filterProtocols" class="d-none col-xs-12 col-sm-6 col-md-4 col-lg-3" data-view="graphs" data-display="sources protocols ports">
                        <p class="h6">Protocols</p>

                        <div id="filterProtocolButtons" class="btn-group btn-group-md" data-bs-toggle="buttons">
                            <input type="radio" class="btn-check" name="protocol[]" value="any" id="filterProtocolAny">
                            <label class="btn btn-outline-primary" for="filterProtocolAny">Any</label>
                            <input type="radio" class="btn-check" name="protocol[]" value="tcp" id="filterProtocolTcp">
                            <label class="btn btn-outline-primary" for="filterProtocolTcp">TCP</label>
                            <input type="radio" class="btn-check" name="protocol[]" value="udp" id="filterProtocolUdp">
                            <label class="btn btn-outline-primary" for="filterProtocolUdp">UDP</label>
                            <input type="radio" class="btn-check" name="protocol[]" value="icmp" id="filterProtocolIcmp">
                            <label class="btn btn-outline-primary" for="filterProtocolIcmp">ICMP</label>
                            <input type="radio" class="btn-check" name="protocol[]" value="other" id="filterProtocolOther">
                            <label class="btn btn-outline-primary" for="filterProtocolOther">Others</label>
                        </div>
                    </div>

                    <div id="filterTypes" class="d-none col-xs-12 col-sm-6 col-md-3 col-lg-2" data-view="graphs" data-display="sources protocols ports">
                        <p class="h6">Data Type</p>

                        <div class="btn-group btn-group-md" data-bs-toggle="buttons">
                            <input type="radio" class="btn-check" name="datatype" value="traffic" id="dataTypeTraffic" checked>
                            <label class="btn btn-outline-primary" for="dataTypeTraffic">Traffic</label>
                            <input type="radio" class="btn-check" name="datatype" value="packets" id="dataTypePackets">
                            <label class="btn btn-outline-primary" for="dataTypePackets">Packets</label>
                            <input type="radio" class="btn-check" name="datatype" value="flows" id="dataTypeFlows">
                            <label class="btn btn-outline-primary" for="dataTypeFlows">Flows</label>
                        </div>
                    </div>

                    <div id="trafficUnit" class="d-none col-xs-6 col-sm-3 col-md-2 col-lg-2" data-view="graphs" data-display="sources protocols ports">
                        <p class="h6">Traffic unit</p>

                        <div class="btn-group btn-group-md" data-bs-toggle="buttons">
                            <input type="radio" class="btn-check" name="trafficUnit" value="bits" id="trafficUnitBits" checked>
                            <label class="btn btn-outline-primary" for="trafficUnitBits">Bits</label>
                            <input type="radio" class="btn-check" name="trafficUnit" value="bytes" id="trafficUnitBytes">
                            <label class="btn btn-outline-primary" for="trafficUnitBytes">Bytes</label>
                        </div>
                    </div>

                    <div id="filterFlowsLimit" class="d-none col-xs-6 col-sm-2 col-md-2 col-lg-1" data-view="flows">
                        <p class="h6">Limit Flows</p>

                        <div class="form-group">
                            <select id="flowsFilterLimitSelection" class="form-control form-select">
                                <option value="20">20</option>
                                <option value="50" >50</option>
                                <option value="100" >100</option>
                                <option value="500" >500</option>
                                <option value="1000" >1000</option>
                                <option value="10000" >10000</option>
                            </select>
                        </div>
                    </div>

                    <div id="filterStatisticsTop" class="d-none col-xs-6 col-sm-2 col-md-2 col-lg-1" data-view="statistics">
                        <p class="h6">Top records</p>
                        <div class="form-group">
                            <select id="statsFilterTopSelection" class="form-control form-select">
                                <option value="10" selected>10</option>
                                <option value="20">20</option>
                                <option value="50">50</option>
                                <option value="100">100</option>
                                <option value="200">200</option>
                                <option value="500">500</option>
                            </select>
                        </div>
                    </div>


                    <div id="filterNfdump" class="d-none col-xs-12 col-sm-7 col-md-5" data-view="graphs flows statistics">

                        <p class="h6">NFDUMP filter <span aria-hidden="true" data-bs-toggle="tooltip" data-bs-placement="right" title="The filter syntax is similar to the well known pcap library used by tcpdump. All keywords are case-independent. Example: dst port 80"><svg xmlns="http://www.w3.org/2000/svg" width="16" height=>"16" fill="currentColor" class="bi bi-info-circle-fill" viewBox="0 0 16 16">
                            <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2"/>
                        </svg></span></p>

                        <div class="form-group">
                            <textarea class="form-control" id="filterNfdumpTextarea" rows="3" autocomplete="on"></textarea>
                        </div>

                        <div class="btn-group">
                            <div id="filterFilters" class="form-group">
                            <label class="form-control" >Filters</label>
                            <select id="filterFiltersSelect" class="form-control form-select" title="Filters" style="">
                                <option value="" disabled selected>Select your filter</option>
                            </select>
                            </div>

                            <button id="filterFiltersButtonRemove" type="button" class="btn btn-outline-primary" >Delete filter (server)</button>
                            <button id="filterFiltersButtonSave" type="button" class="btn btn-outline-primary" >Save filter (server)</button>
                        </div>

                    </div>

                    <div id="filterFlowAggregation" class="col">
                        <div class="d-none" data-view="flows">

                            <p class="h6">Global Aggregation</p>
                            <div class="btn-group btn-group-md" data-bs-toggle="buttons" id="filterFlowAggregationGlobal">
                                <input type="checkbox" class="btn-check" name="bidirectional" id="filterFlowAggregationGlobalBi">
                                <label class="btn btn-outline-primary" for="filterFlowAggregationGlobalBi">Bi-directional</label>

                                <input data-disable-on="bi-directional" type="checkbox" class="btn-check" name="proto" id="filterFlowAggregationGlobalProto">
                                <label class="btn btn-outline-primary" for="filterFlowAggregationGlobalProto">Protocol</label>
                            </div>

                        </div>
                        <div class="d-none" data-view="flows">
                            <p class="h6">Port Aggregation</p>
                            <div class="btn-group btn-group-md" data-bs-toggle="buttons" id="filterFlowAggregationPort">
                                <input data-disable-on="bi-directional" type="checkbox" class="btn-check" name="srcport" id="filterFlowAggregationPortSrc">
                                <label class="btn btn-outline-primary" for="filterFlowAggregationPortSrc">Source port</label>

                                <input data-disable-on="bi-directional" type="checkbox" class="btn-check" name="dstport" id="filterFlowAggregationPortDst">
                                <label class="btn btn-outline-primary" for="filterFlowAggregationPortDst">Destination port</label>
                            </div>
                        </div>

                        <div class="d-none" data-view="flows">
                            <p class="h6">IP Aggregation</p>
                            <div class="row">
                                <div class="col-xs-6 col-sm-6">
                                    <label>Source</label><br>
                                    <div class="form-group">
                                        <select data-disable-on="bi-directional" data-kind="source" name="srcip" id="filterFlowAggregationSourceAddressSelect" class="form-control form-select float-start" style="width: 70%">
                                            <option value="none">No aggregation</option>
                                            <option value="srcip">IP</option>
                                            <option value="srcip4">IPv4 subnets</option>
                                            <option value="srcip6">IPv6 subnets</option>
                                        </select>
                                        <div id="sourceCIDRPrefixDiv" class="d-none float-start" style="width:30%">
                                            <input data-disable-on="bi-directional" id="sourceCIDRPrefix" placeholder="24" name="srcipprefix" type="text" class="form-control">
                                        </div>
                                    </div>
                                </div>

                                <div class="col-xs-6 col-sm-6">
                                    <label>Destination</label>
                                    <div class="form-group">
                                        <select data-disable-on="bi-directional" data-kind="destination" name="dstip" id="filterFlowAggregationDestinationAddressSelect" class="form-control form-select float-start" style="width: 70%">
                                            <option value="none">No aggregation</option>
                                            <option value="dstip">IP</option>
                                            <option value="dstip4">IPv4 subnets</option>
                                            <option value="dstip6">IPv6 subnets</option>
                                        </select>
                                        <div id="destinationCIDRPrefixDiv" class="d-none float-start" style="width:30%">
                                            <input data-disable-on="bi-directional" id="destinationCIDRPrefix" placeholder="24" name="dstipprefix" type="text" class="form-control">
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div><!-- flowsFilterAggregationDiv  -->
                    </div>

                    <div id="statsLimitDiv" class="d-none col-xs-6 col-sm-6 col-md-2" data-view="statistics">
                        <p class="h6">Data Limit</p>
                        <div class="form-group">
                            <select id="statsLimitSelect" class="form-control form-select" data-view="statistics" disabled>
                                <option value="none">No limit</option>
                                <option value="">Packets</option>
                                <option value="">Bytes</option>
                            </select>
                        </div>
                    </div>

                    <div id="filterStatsProperties" class="d-none col-xs-6 col-sm-6 col-md-4 col-lg-2" data-view="statistics">

                        <p class="h6">Statistic properties</p>

                        <div class="form-group">
                            <label for="statsFilterForSelection">Statistic for</label>
                            <select id="statsFilterForSelection" class="form-control form-select">
                                <option value="record" selected>Flow Records</option>
                                <option value="ip">Any IP address</option>
                                <option value="srcip">Src IP address</option>
                                <option value="dstip">Dst IP address</option>
                                <option value="port">Any port</option>
                                <option value="srcport">Src port</option>
                                <option value="dstport">Dst port</option>
                                <option value="if">Any interface</option>
                                <option value="inif">IN interface</option>
                                <option value="outif">OUT interface</option>
                                <option value="as">Any AS</option>
                                <option value="srcas">Src AS</option>
                                <option value="dstas">Dst AS</option>
                                <option value="nhip">Next Hop IP</option>
                                <option value="nhbip">Next Hop BGP IP</option>
                                <option value="router">Router IP</option>
                                <option value="proto">Proto</option>
                                <option value="dir">Direction</option>
                                <option value="srctos">Src TOS</option>
                                <option value="dsttos">Dst TOS</option>
                                <option value="tos">Tos</option>
                                <option value="mask">Any Mask Bits</option>
                                <option value="srcmask">Src Mask Bits</option>
                                <option value="dstmask">Dst Mask Bits</option>
                                <option value="vlan">Any VLAN ID</option>
                                <option value="srcvlan">Src VLAN ID</option>
                                <option value="dstvlan">Dst VLAN ID</option>
                                <option value="srcmac">Src MAC</option>
                                <option value="dstmac">Dst MAC</option>
                                <option value="inmac">IN MAC</option>
                                <option value="outmac">OUT MAC</option>
                                <option value="insrcmac">IN src MAC</option>
                                <option value="outdstmac">OUT dst MAC</option>
                                <option value="indstmac">IN dst MAC</option>
                                <option value="outsrcmac">OUT src MAC</option>
                                <option value="mpls1">MPLS Label 1</option>
                                <option value="mpls2">MPLS Label 2</option>
                                <option value="mpls3">MPLS Label 3</option>
                                <option value="mpls4">MPLS Label 4</option>
                                <option value="mpls5">MPLS Label 5</option>
                                <option value="mpls6">MPLS Label 6</option>
                                <option value="mpls7">MPLS Label 7</option>
                                <option value="mpls8">MPLS Label 8</option>
                                <option value="mpls9">MPLS Label 9</option>
                                <option value="mpls10">MPLS Label 10</option>
                            </select>
                        </div>

                        <div class="form-group">
                            <label for="statsFilterOrderBySelection">Order by</label>
                            <select id="statsFilterOrderBySelection" class="form-control form-select">
                                <option value="flows" selected>Flows</option>
                                <option value="packets">Packets</option>
                                <option value="bytes">Bytes</option>
                                <option value="pps">Packets per second</option>
                                <option value="bps">Bits per second</option>
                                <option value="bpp">Bytes per packet</option>
                            </select>
                        </div>

                    </div><!-- statsFilterPropertiesDiv  -->

                    <div id="filterOutput" class="hidden col-xs-12 col-sm-6 col-md-4 col-lg-4" data-view="flows statistics">

                        <p class="h6">Output</p>
                        <div class="row">
                            <div class="form-group col-xs-6 col-sm-6">
                                <label for="filterOutputSelection">Output type</label>
                                <select id="filterOutputSelection" name="filterOutputSelection" class="form-control form-select">
                                    <option value="line">Line</option>
                                    <option value="long">Long</option>
                                    <option value="extended">Extended</option>
                                    <option value="full">Full</option>
                                    <option value="custom">Custom</option>
                                </select>
                            </div>

                            <div class="form-group col-xs-6 col-sm-6">
                                <label>Other options</label>
                                <br>
                                <div class="" id="flowsFilterOther" data-bs-toggle="buttons">
                                    <input type="checkbox" class="btn-check" name="ordertstart" value="true" id="flowsFilterOtherOrderTstart">
                                    <label class="btn btn-outline-primary" data-view="flows" for="flowsFilterOtherOrderTstart">Order by tstart</label>
                                </div>
                            </div>
                        </div>

                        <div id="customListOutputFormat" class="form-group hidden">
                            <label for="customListOutputFormatValue">Custom output format
                                <span aria-hidden="true" data-bs-toggle="tooltip" data-bs-placement="right" title="Specify output format in nfdump-style. E.g. %ts %tr %pr"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-info-circle-fill" viewBox="0 0 16 16">
  <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2"/>
</svg></span></label>
                            <input id="customListOutputFormatValue" type="text" class="form-control">
                        </div>
                    </div>

                    <div id="filterCommands" class="hidden col-xs-12 col-sm-6 col-md-3" data-view="flows statistics">
                        <p class="h6">Commands</p>
                        <div class="btn-group btn-group-md" data-bs-toggle="buttons">
                            <button type="button" class="btn btn-outline-primary submit">Process data</button>
                            <button type="button" class="btn btn-success csv">Get CSV</button>
                            <button type="button" class="btn btn-outline-primary reset">Reset filters</button>
                        </div>
                    </div>
                </div><!-- statsFilterDiv  -->
            </form>

        </div><!-- filterDiv  -->

        <div id="error"></div>

        <div id="contentDiv">

            <div id="graphsContentDiv" data-view="graphs" class="content container-fluid">

                <div class="col-sm-12 my-4">
                    <div id="flowDiv" style="width: 100%;"></div>
                </div>

                <div id="graphOptions" class="row">
                    <div class="col-xs-6 col-sm-3">
                        <p class="h6">Graph Scale</p>
                        <div class="btn-group" role="group" id="graph_linlog">
                            <input type="radio" class="btn-check" name="scale" autocomplete="off" value="linear" checked id="graph_linlog_linear">
                            <label for="graph_linlog_linear" class="btn btn-outline-primary">Linear</label>

                            <input id="graph_linlog_log" type="radio" class="btn-check" name="scale" autocomplete="off" value="logarithmic">
                            <label for="graph_linlog_log" class="btn btn-outline-primary">Logarithmic</label>
                        </div>
                    </div>

                    <div class="col-xs-6 col-sm-3">
                        <p class="h6">Series display</p>
                        <div class="btn-group" data-bs-toggle="buttons" id="graph_linestacked">
                            <input type="radio" class="btn-check" name="type" autocomplete="off" value="stacked" checked id="graph_linestacked_stacked">
                            <label class="btn btn-outline-primary" for="graph_linestacked_stacked">Stacked</label>

                            <input type="radio" class="btn-check" name="type" autocomplete="off" value="line" id="graph_linestacked_line">
                            <label class="btn btn-outline-primary" for="graph_linestacked_line">Line</label>
                        </div>

                        <div class="btn-group" data-bs-toggle="buttons" id="graph_lineplot">
                            <input type="radio" class="btn-check" name="lineplot" autocomplete="off" value="step" id="graph_lineplot_step" checked>
                            <label class="btn btn-outline-primary" for="graph_lineplot_step">Step plot</label>

                            <input type="radio" class="btn-check" name="lineplot" autocomplete="off" value="curve" id="graph_lineplot_curve">
                            <label class="btn btn-outline-primary" for="graph_lineplot_curve">Curve plot</label>
                        </div>
                    </div>

                    <div class="col-xs-6 col-sm-3 accordion">
                        <p class="h6" data-bs-toggle="collapse" data-bs-target="#series" role="button" aria-expanded="true">Series</p>
                        <div class="collapse show" id="series"></div>
                    </div>

                    <div class="col-xs-6 col-sm-3 accordion">
                        <p class="h6" data-bs-toggle="collapse" data-bs-target="#legend" role="button" aria-expanded="true">Values</p>
                        <div class="collapse show" id="legend"></div>
                    </div>
                </div>
            </div>
            <div id="flowsContentDiv" data-view="flows" class="content">
                <table class="table" data-paging="true" data-paging-limit="10" data-paging-size="50" data-filtering="true" data-sorting="true"></table>
            </div><!-- flowsContentDiv  -->

            <div id="statisticsContentDiv" data-view="statistics" class="content">
                <table class="table" data-paging="true" data-paging-limit="10" data-paging-size="50" data-filtering="true" data-sorting="true"></table>
            </div><!-- statsContentDiv  -->

        </div><!-- contentDiv  -->

        <div class="modal fade" id="modal" tabindex="-1" aria-labelledby="modalLabel" aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <h1 class="modal-title fs-5" id="modalLabel">Modal title</h1>
                        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                    </div>
                    <div class="modal-body"></div>
                    <div class="modal-loader d-none text-center">
                        <div class="spinner-border" role="status">
                            <span class="visually-hidden">Loading</span>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
                    </div>
                </div>
            </div>
        </div>
        <script src="js/nfsen-ng.js"></script>
    </body>
</html>