├── .gitattributes ├── .gitignore ├── LICENSE ├── README.MD ├── TODO.md ├── current_ui_state.png ├── extras └── traceroute_history.service ├── tests ├── smokeping_example_configs │ ├── smokeping_example1.conf │ ├── smokeping_example2.conf │ ├── smokeping_example2_includes.conf │ ├── smokeping_example3.conf │ ├── smokeping_example3_includes1.conf │ └── smokeping_example3_includes2.conf └── test_config_management.py └── traceroute_history ├── __init__.py ├── assets ├── app │ └── app.calendar.js ├── css │ ├── sleek.css │ ├── sleek.css.map │ ├── sleek.min.css │ ├── sleek.min.rtl.css │ ├── sleek.rtl.css │ └── styles.css ├── data │ └── search.json ├── img │ ├── details_close.png │ ├── details_open.png │ ├── elements │ │ ├── cc1.jpg │ │ ├── cc1a.jpg │ │ ├── cc1b.jpg │ │ ├── cc1c.jpg │ │ ├── cc2a.jpg │ │ ├── cc2b.jpg │ │ ├── cc2c.jpg │ │ ├── cc3a.jpg │ │ ├── cc3b.jpg │ │ ├── cc3c.jpg │ │ ├── cc4a.jpg │ │ ├── cc4b.jpg │ │ ├── cc4c.jpg │ │ ├── client.png │ │ ├── slide1.jpg │ │ ├── slide2.jpg │ │ ├── slide3.jpg │ │ ├── slide4.jpg │ │ ├── slider5.jpg │ │ ├── slider6.jpg │ │ ├── slider7.jpg │ │ └── slider8.jpg │ ├── favicon.png │ ├── github │ │ ├── analytics.png │ │ ├── calendar.png │ │ ├── chart-widgets.png │ │ ├── chat.png │ │ ├── chrome.png │ │ ├── contacts.png │ │ ├── ecommerce.png │ │ ├── edge.png │ │ ├── firefox.png │ │ ├── general-widgets.png │ │ ├── opera.png │ │ ├── safari.png │ │ ├── sleek.gif │ │ └── team.png │ ├── lightenning.png │ ├── products │ │ ├── p1.jpg │ │ ├── p2.jpg │ │ ├── p3.jpg │ │ ├── pa1.jpg │ │ ├── pa2.jpg │ │ ├── pa3.jpg │ │ ├── pa4.jpg │ │ ├── pa5.jpg │ │ └── pa6.jpg │ ├── shop │ │ ├── cart1.jpg │ │ └── cart2.jpg │ ├── sleek-icon.png │ ├── sort_asc.png │ ├── sort_both.png │ ├── ui-icons │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_444444_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_555555_256x240.png │ │ ├── ui-icons_777620_256x240.png │ │ ├── ui-icons_777777_256x240.png │ │ ├── ui-icons_cc0000_256x240.png │ │ └── ui-icons_ffffff_256x240.png │ └── user │ │ ├── Untitled-1.jpg │ │ ├── u-xl-1.jpg │ │ ├── u-xl-10.jpg │ │ ├── u-xl-11.jpg │ │ ├── u-xl-12.jpg │ │ ├── u-xl-2.jpg │ │ ├── u-xl-3.jpg │ │ ├── u-xl-4.jpg │ │ ├── u-xl-5.jpg │ │ ├── u-xl-6.jpg │ │ ├── u-xl-7.jpg │ │ ├── u-xl-8.jpg │ │ ├── u-xl-9.jpg │ │ ├── u1.jpg │ │ ├── u2.jpg │ │ ├── u3.jpg │ │ ├── u4.jpg │ │ ├── u5.jpg │ │ ├── u6.jpg │ │ ├── u7.jpg │ │ ├── u8.jpg │ │ └── user.png ├── js │ ├── chart.js │ ├── custom.js │ ├── date-range.js │ ├── map.js │ ├── sleek.bundle.js │ ├── sleek.bundle.js.map │ ├── sleek.bundle.min.js │ └── sleek.js └── plugins │ ├── bootstrap │ ├── css │ │ ├── bootstrap-grid.css │ │ ├── bootstrap-grid.css.map │ │ ├── bootstrap-grid.min.css │ │ ├── bootstrap-grid.min.css.map │ │ ├── bootstrap-reboot.css │ │ ├── bootstrap-reboot.css.map │ │ ├── bootstrap-reboot.min.css │ │ ├── bootstrap-reboot.min.css.map │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.css.map │ └── js │ │ ├── bootstrap.bundle.js │ │ ├── bootstrap.bundle.js.map │ │ ├── bootstrap.bundle.min.js │ │ ├── bootstrap.bundle.min.js.map │ │ ├── bootstrap.js │ │ ├── bootstrap.js.map │ │ ├── bootstrap.min.js │ │ ├── bootstrap.min.js.map │ │ ├── popper.min.js │ │ └── tether.min.js │ ├── charts │ └── Chart.min.js │ ├── circle-progress │ └── circle-progress.js │ ├── data-tables │ ├── datatables.bootstrap4.min.css │ ├── datatables.bootstrap4.min.js │ ├── datatables.responsive.min.js │ ├── jquery.datatables.min.css │ ├── jquery.datatables.min.js │ └── responsive.datatables.min.css │ ├── daterangepicker │ ├── daterangepicker.css │ ├── daterangepicker.js │ └── moment.min.js │ ├── fullcalendar │ ├── core-4.3.1 │ │ ├── main.css │ │ ├── main.js │ │ ├── main.min.css │ │ └── main.min.js │ ├── daygrid-4.3.0 │ │ ├── main.css │ │ ├── main.js │ │ ├── main.min.css │ │ └── main.min.js │ ├── interaction │ │ └── main.js │ ├── list │ │ └── main.css │ ├── month-picker │ │ ├── monthpicker.min.css │ │ └── monthpicker.min.js │ ├── popper │ │ └── popper.min.js │ ├── timegrid │ │ ├── main.css │ │ └── main.js │ └── tooltip │ │ └── tooltip.min.js │ ├── jekyll-search.min.js │ ├── jquery-mask-input │ ├── jquery.mask.js │ └── jquery.mask.min.js │ ├── jquery │ ├── jquery-migrate-1.4.1.min.js │ ├── jquery-ui-1.12.1.css │ ├── jquery-ui-1.12.1.min.js │ ├── jquery.js │ └── jquery.min.js │ ├── jvectormap │ ├── jquery-jvectormap-2.0.3.css │ ├── jquery-jvectormap-2.0.3.min.js │ └── jquery-jvectormap-world-mill.js │ ├── ladda │ ├── ladda-themeless.min.css │ ├── ladda.jquery.min.js │ ├── ladda.min.css │ ├── ladda.min.js │ └── spin.min.js │ ├── nprogress │ ├── nprogress.css │ └── nprogress.js │ ├── select2 │ ├── css │ │ ├── select2.css │ │ └── select2.min.css │ └── js │ │ ├── i18n │ │ ├── af.js │ │ ├── ar.js │ │ ├── az.js │ │ ├── bg.js │ │ ├── bs.js │ │ ├── ca.js │ │ ├── cs.js │ │ ├── da.js │ │ ├── de.js │ │ ├── dsb.js │ │ ├── el.js │ │ ├── en.js │ │ ├── es.js │ │ ├── et.js │ │ ├── eu.js │ │ ├── fa.js │ │ ├── fi.js │ │ ├── fr.js │ │ ├── gl.js │ │ ├── he.js │ │ ├── hi.js │ │ ├── hr.js │ │ ├── hsb.js │ │ ├── hu.js │ │ ├── hy.js │ │ ├── id.js │ │ ├── is.js │ │ ├── it.js │ │ ├── ja.js │ │ ├── km.js │ │ ├── ko.js │ │ ├── lt.js │ │ ├── lv.js │ │ ├── mk.js │ │ ├── ms.js │ │ ├── nb.js │ │ ├── nl.js │ │ ├── pl.js │ │ ├── ps.js │ │ ├── pt-BR.js │ │ ├── pt.js │ │ ├── ro.js │ │ ├── ru.js │ │ ├── sk.js │ │ ├── sl.js │ │ ├── sr-Cyrl.js │ │ ├── sr.js │ │ ├── sv.js │ │ ├── th.js │ │ ├── tk.js │ │ ├── tr.js │ │ ├── uk.js │ │ ├── vi.js │ │ ├── zh-CN.js │ │ └── zh-TW.js │ │ ├── select2.full.js │ │ ├── select2.full.min.js │ │ ├── select2.js │ │ └── select2.min.js │ ├── slimscrollbar │ ├── jquery.slimscroll.js │ └── jquery.slimscroll.min.js │ └── toastr │ ├── toastr.css │ ├── toastr.js.map │ ├── toastr.min.css │ └── toastr.min.js ├── config_management.py ├── crud.py ├── database.py ├── exceptions.py ├── extras └── traceroute_history_ui.service ├── models.py ├── requirements-python36.txt ├── requirements.txt ├── schemas.py ├── smokeping_th_helper.fcgi ├── smokeping_th_helper.js ├── traceroute_history.conf ├── traceroute_history_runner.py ├── trparse.py ├── user_interface.py └── www ├── assets ├── css │ ├── sleek.css │ ├── sleek.css.map │ ├── sleek.min.css │ ├── sleek.min.rtl.css │ ├── sleek.rtl.css │ └── styles.css ├── img │ ├── details_close.png │ ├── details_open.png │ ├── favicon.png │ ├── lightenning.png │ ├── sleek-icon.png │ ├── sort_asc.png │ ├── sort_both.png │ └── ui-icons │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_444444_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_555555_256x240.png │ │ ├── ui-icons_777620_256x240.png │ │ ├── ui-icons_777777_256x240.png │ │ ├── ui-icons_cc0000_256x240.png │ │ └── ui-icons_ffffff_256x240.png ├── js │ ├── chart.js │ ├── custom.js │ ├── date-range.js │ ├── map.js │ ├── sleek.bundle.js │ ├── sleek.bundle.js.map │ ├── sleek.bundle.min.js │ └── sleek.js └── plugins │ ├── data-tables │ ├── datatables.bootstrap4.min.css │ ├── datatables.bootstrap4.min.js │ ├── datatables.responsive.min.js │ ├── jquery.datatables.min.css │ ├── jquery.datatables.min.js │ └── responsive.datatables.min.css │ ├── daterangepicker │ ├── daterangepicker.css │ ├── daterangepicker.js │ └── moment.min.js │ ├── jekyll-search.min.js │ ├── jquery │ ├── jquery-migrate-1.4.1.min.js │ ├── jquery-ui-1.12.1.css │ ├── jquery-ui-1.12.1.min.js │ ├── jquery.js │ └── jquery.min.js │ ├── nprogress │ ├── nprogress.css │ └── nprogress.js │ └── slimscrollbar │ ├── jquery.slimscroll.js │ └── jquery.slimscroll.min.js └── templates ├── base.html ├── headerbar.html ├── sidebar.html └── targets.html /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # celery beat schedule file 95 | celerybeat-schedule 96 | 97 | # SageMath parsed files 98 | *.sage.py 99 | 100 | # Environments 101 | .env 102 | .venv 103 | env/ 104 | venv/ 105 | ENV/ 106 | env.bak/ 107 | venv.bak/ 108 | 109 | # Spyder project settings 110 | .spyderproject 111 | .spyproject 112 | 113 | # Rope project settings 114 | .ropeproject 115 | 116 | # mkdocs documentation 117 | /site 118 | 119 | # mypy 120 | .mypy_cache/ 121 | .dmypy.json 122 | dmypy.json 123 | 124 | # Pyre type checker 125 | .pyre/ 126 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2020, Orsiris de Jong 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # Traceroute History 2 | 3 | Traceroute History is under heavy developpment (see TODO.TXT). 4 | 5 | Traceroute History records Unix traceroute & Windows tracert outputs to a database, upon host changes in hops, or big rtt increases to hops. 6 | The core can be run as a service or as a cron task, both providing regular probe updates. 7 | It can be run via cron / task scheduler or as service. 8 | 9 | ## Setup 10 | 11 | 1. Install traceroute binary via `dnf install traceroute`. On Windows, binary `tracert` should be included in system32 directory. 12 | 1. Install development tools via `dnf install python3-devel gcc make` in order to compile required python modules. 13 | 2. Install requirements via `pip -m install -r requirements.txt` and `pip -m install -r requirements-python36.txt` if you run with Python 3.6 14 | 3. Adjust the configuration file `traceroute_history.conf` according to your needs. 15 | 4. Initialize the database 16 | `traceroute_history_runner.py --config=traceroute_history.conf --init-db` 17 | 5. Run as cron task with `traceroute_history_runner.py --config=traceroute_history.conf --update-now` 18 | 19 | Example of a cron entry in /etc/crontab 20 | 21 | `30 * * * * root /usr/bin/python3 /opt/traceroute_history/traceroute_history_runner.py --config=/opt/traceroute_history/traceroute_history.conf --update-now` 22 | 23 | or run as service 24 | `traceroute_history_runner.py --config=traceroute_history.conf --daemon` 25 | 26 | ## User interface 27 | 28 | There's currently a CLI and a GUI interface available. 29 | CLI can be executed directly via the script, eg: 30 | 31 | `traceroute_history_runner.py --help` 32 | 33 | GUI relies on FastAPI and uvicorn modules. 34 | 35 | GUI can be launched via `user_interface.py` and will by default listen on 127.0.0.1:5001. Bind ip and port be modified in `traceroute_history.conf`. 36 | 37 | Additionnaly, a systemd file is provided for launching the user interface in `extras` 38 | 39 | ``` 40 | cp extras/traceroute_history_ui.service /usr/lib/systemd/system 41 | systemctl enable --now traceroute_history_ui 42 | systemctl status traceroute_history_ui 43 | ``` 44 | 45 | ![Test Image 1](current_ui_state.png) 46 | 47 | ## Smokeping integration - Webserver 48 | 49 | Traceroute History can directly read smokeping configuration files in order to add them as probe targets. 50 | It also provides a FastCGI script that can be directly integrated into smokeping: 51 | 52 | ### Apache 53 | 54 | In your smokeping virtualhost add 55 | 56 | ``` 57 | 58 | require all granted 59 | 60 | 61 | Alias /smokeping_th_helper.fcgi /path/to/traceroute_history/smokeping_th_helper.fgci 62 | ``` 63 | 64 | ### Nginx 65 | 66 | You need to install fcgiwrap for CGI wrapper interact with Nginx: 67 | 68 | * Debian/Ubuntu: `apt install fcgiwrap` 69 | * CentOS/RHEL: `yum install fcgiwrap` 70 | 71 | Then configure Nginx with the default configuration: 72 | 73 | `cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf` 74 | 75 | Make symbolic link for smokeping_th_helper.fcgi: 76 | 77 | `ln': ln -s /opt/traceroute_history/smokeping_th_helper.fcgi /usr/lib/cgi-bin/smokeping_th_helper.fcgi` 78 | 79 | In your smokeping virtualhost add 80 | 81 | ``` 82 | location = /smokeping/smokeping_th_helper.fcgi { 83 | alias /opt/traceroute_history/smokeping_th_helper.fcgi; 84 | 85 | fastcgi_intercept_errors on; 86 | 87 | fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/smokeping_th_helper.fcgi; 88 | fastcgi_param QUERY_STRING $query_string; 89 | fastcgi_param REQUEST_METHOD $request_method; 90 | fastcgi_param CONTENT_TYPE $content_type; 91 | fastcgi_param CONTENT_LENGTH $content_length; 92 | fastcgi_param REQUEST_URI $request_uri; 93 | fastcgi_param DOCUMENT_URI $document_uri; 94 | fastcgi_param DOCUMENT_ROOT $document_root; 95 | fastcgi_param SERVER_PROTOCOL $server_protocol; 96 | fastcgi_param GATEWAY_INTERFACE CGI/1.1; 97 | fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 98 | fastcgi_param REMOTE_ADDR $remote_addr; 99 | fastcgi_param REMOTE_PORT $remote_port; 100 | fastcgi_param SERVER_ADDR $server_addr; 101 | fastcgi_param SERVER_PORT $server_port; 102 | fastcgi_param SERVER_NAME $server_name; 103 | fastcgi_param HTTPS $https if_not_empty; 104 | 105 | fastcgi_pass unix:/var/run/fcgiwrap.socket; 106 | } 107 | ``` 108 | 109 | ## Smokeping integration - HTML 110 | 111 | In your smokeping basepage.html file (generally in /opt/smokeping/etc), add the `smokeping_th_helper.js` script after the other scripts. 112 | Your source should look like: 113 | ``` 114 | 115 | 116 | 117 | 118 | // Added script 119 | 120 | ``` 121 | 122 | Also copy `smokeping_th_helper.js` to your `www/js` folder. 123 | 124 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | ## What's missing 2 | 3 | Roadmap (we are currently heading towards v0.5.0) 4 | 5 | Future 6 | - Add an alternate internal traceroute implementation that is capable of TCP, UDP and ICMP protocols 7 | - Add graphs 8 | 9 | v0.7.0 10 | - Add alerts on probe failures and on excessive rtts to any hop hosts 11 | 12 | v0.6.0 13 | - Improve smokeping config file reader (see infile TODO) 14 | 15 | v0.5.0 16 | - Add GUI using Jinja2 17 | - Get rid of UI spaghetti code for the scoped DB 18 | - Investigate usage of Tortoise ORM (see if that mitigates the Scoped session problem with SQLAlchemy/SQLite 19 | 20 | v0.4.0 21 | - Add CRUD API using FastAPI 22 | 23 | v0.3.0 24 | - Add rtt changes detection 25 | 26 | v0.2.0 27 | - Add smokeping fastcgi helper 28 | 29 | v0.1.0 30 | - Full CLI interface 31 | - Cron task & service for probe updating 32 | -------------------------------------------------------------------------------- /current_ui_state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/current_ui_state.png -------------------------------------------------------------------------------- /extras/traceroute_history.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Traceroute History Daemon 3 | After=network-online.target multi-user.target 4 | Wants=network-online.target 5 | 6 | [Service] 7 | ExecStart=/usr/bin/env python3 /opt/traceroute_history/traceroute_history.py --config=/opt/traceroute_history/traceroute_history.conf --daemon 8 | WorkingDirectory=/opt/traceroute_history 9 | StandardError=syslog 10 | PIDFile=/var/run/traceroute_history.pid 11 | Restart=on-failure 12 | RestartSec=3600s 13 | 14 | [Install] 15 | WantedBy=multi-user.target 16 | -------------------------------------------------------------------------------- /tests/smokeping_example_configs/smokeping_example2_includes.conf: -------------------------------------------------------------------------------- 1 | +++ includedPC1 2 | 3 | menu = includedPC1 4 | title = Apache 2 Server for includedPC1 5 | probe = FPing 6 | host = includedPC1 7 | 8 | +++ includedPC2 9 | 10 | menu = includedPC2 11 | title = Apache 2 Server for includedPC1 12 | probe = FPing 13 | host = includedPC2 -------------------------------------------------------------------------------- /tests/smokeping_example_configs/smokeping_example3.conf: -------------------------------------------------------------------------------- 1 | *** Targets *** 2 | 3 | probe = FPing 4 | 5 | menu = Top 6 | title = Network Latency Grapher 7 | remark = Welcome to the SmokePing website of Insert Company Name Here. \ 8 | Here you will learn all about the latency of our network. 9 | 10 | # 1. ANYCAST 11 | @include /etc/smokeping/config.d/smokeping_example3_includes1.conf 12 | 13 | # 2. ISPs 14 | @include /etc/smokeping/config.d/smokeping_example3_includes2.conf 15 | -------------------------------------------------------------------------------- /tests/smokeping_example_configs/smokeping_example3_includes1.conf: -------------------------------------------------------------------------------- 1 | + ANYCAST 2 | menu = 1. ANYCAST 3 | title = ANYCAST 4 | 5 | ++ AS60068 6 | menu = ANYCAST CDN77 AS60068 7 | title = ANYCAST CDN77 (AS60068 www.cdn77.com) 8 | probe = FPing 9 | host = www.cdn77.com 10 | 11 | ++ AS13335 12 | menu = ANYCAST Cloudflare AS13335 13 | title = ANYCAST Cloudflare (AS13335 1.1.1.1) 14 | probe = FPing 15 | host = 1.1.1.1 16 | 17 | ++ AS112 18 | menu = ANYCAST DNS-OARC AS112 19 | title = ANYCAST DNS-OARC (AS112 192.175.48.1) 20 | probe = FPing 21 | host = 192.175.48.1 22 | 23 | ++ AS15169-1 24 | menu = ANYCAST Google API AS15169 25 | title = ANYCAST Google API (AS15169 www.googleapis.com) 26 | probe = FPing 27 | host = www.googleapis.com 28 | 29 | ++ AS15169-2 30 | menu = ANYCAST Google DNS AS15169 31 | title = ANYCAST Google DNS (AS15169 8.8.8.8) 32 | probe = FPing 33 | host = 8.8.8.8 34 | 35 | ++ AS15169-3 36 | menu = ANYCAST Google DRIVE AS15169 37 | title = ANYCAST Google DRIVE (AS15169 drive.google.com) 38 | probe = FPing 39 | host = drive.google.com 40 | 41 | ++ AS19281 42 | menu = ANYCAST Quad9 AS19281 43 | title = ANYCAST Quad9 (AS19281 9.9.9.9) 44 | probe = FPing 45 | host = 9.9.9.9 46 | 47 | ++ AS2635 48 | menu = ANYCAST WordPress AS2635 49 | title = ANYCAST WordPress (AS2635 ns1.wordpress.com) 50 | probe = FPing 51 | host = ns1.wordpress.com 52 | 53 | @include /etc/smokeping/config.d/anycast-rootDNS.conf -------------------------------------------------------------------------------- /tests/smokeping_example_configs/smokeping_example3_includes2.conf: -------------------------------------------------------------------------------- 1 | + ISPs 2 | menu = 2. ISPs 3 | title = ISPs 4 | 5 | ++ OVH 6 | menu = FR OVH AS16276 7 | title = [FR] ISP OVH (AS16276 ovh.es) 8 | probe = FPing 9 | host = ovh.es 10 | 11 | ++ Online 12 | menu = FR Online.net AS12876 13 | title = [FR] ISP Online.net (AS12876 nsa.online.net) 14 | probe = FPing 15 | host = nsa.online.net 16 | 17 | ++ Hetzner 18 | menu = DE Hetzner AS24940 19 | title = [DE] ISP Hetzner (AS24940 hetzner.com) 20 | probe = FPing 21 | host = hetzner.com -------------------------------------------------------------------------------- /tests/test_config_management.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # 4 | # This file is part of ofunctions module 5 | 6 | """ 7 | Versioning semantics: 8 | Major version: backward compatibility breaking changes 9 | Minor version: New functionality 10 | Patch version: Backwards compatible bug fixes 11 | """ 12 | 13 | __intname__ = "tests.traceroute_history.config_management" 14 | __author__ = "Orsiris de Jong" 15 | __copyright__ = "Copyright (C) 2022 Orsiris de Jong" 16 | __licence__ = "BSD 3 Clause" 17 | __build__ = "2022050501" 18 | 19 | from traceroute_history import config_management 20 | 21 | 22 | def test_read_smokeping_config(): 23 | conf_file = "tests/smokeping_example_configs/smokeping_example1.conf" 24 | targets = config_management.read_smokeping_config(conf_file) 25 | print(targets) 26 | assert targets == [{'target': 'localhost', 'name': 'The NOC@intERLab'}, {'target': 'pc1', 'name': 'pc1'}, {'target': 'pc2', 'name': 'pc2'}, {'target': 'pc3', 'name': 'pc3'}, {'target': 'pc4', 'name': 'pc4'}, {'target': 'pc5', 'name': 'pc5'}, {'target': 'pc6', 'name': 'pc6'}, {'target': 'pc7', 'name': 'pc7'}, {'target': 'pc8', 'name': 'pc8'}, {'target': 'pc9', 'name': 'pc9'}, {'target': 'pc10', 'name': 'pc10'}, {'target': 'pc11', 'name': 'pc11'}, {'target': 'pc12', 'name': 'pc12'}, {'target': 'pc13', 'name': 'pc13'}, {'target': 'pc14', 'name': 'pc14'}, {'target': 'pc15', 'name': 'pc15'}, {'target': 'localhost', 'name': 'Apache 2 Server for noc'}, {'target': 'pc1', 'name': 'Apache 2 Server for pc1'}, {'target': 'pc2', 'name': 'Apache 2 Server for pc2'}, {'target': 'pc3', 'name': 'Apache 2 Server for pc3'}, {'target': 'pc4', 'name': 'Apache 2 Server for pc4'}, {'target': 'pc5', 'name': 'Apache 2 Server for pc5'}, {'target': 'pc6', 'name': 'Apache 2 Server for pc6'}, {'target': 'pc7', 'name': 'Apache 2 Server for pc7'}, {'target': 'pc8', 'name': 'Apache 2 Server for pc8'}, {'target': 'pc9', 'name': 'Apache 2 Server for pc9'}, {'target': 'pc10', 'name': 'Apache 2 Server for pc10'}, {'target': 'pc11', 'name': 'Apache 2 Server for pc11'}, {'target': 'pc12', 'name': 'Apache 2 Server for pc12'}, {'target': 'pc13', 'name': 'Apache 2 Server for pc13'}, {'target': 'pc14', 'name': 'Apache 2 Server for pc14'}, {'target': 'pc15', 'name': 'Apache 2 Server for pc15'}, {'target': 'noc', 'name': 'Name Server Latency for noc'}, {'target': 'afnog.org', 'name': 'African Network Operators Group'}, {'target': 'nsrc.org', 'name': 'NSRC (Eugene, Oregon, USA)'}, {'target': 'ws.edu.isoc.org', 'name': 'ISOC Workshop Resource Centre (Eugene, Oregon, USA)'}, {'target': 'shell.uoregon.edu', 'name': 'Main User Box, University of Oregon (Eugene, Oregon, USA)'}, {'target': 'sageduck.org', 'name': 'sageduck.org'}], "Bogus smokeping example 1 test" 27 | 28 | conf_file = "tests/smokeping_example_configs/smokeping_example2.conf" 29 | targets = config_management.read_smokeping_config(conf_file) 30 | assert targets == [{'target': 'localhost', 'name': 'The NOC@intERLab'}, {'target': 'pc1', 'name': 'pc1'}, {'target': 'pc2', 'name': 'pc2'}, {'target': 'pc3', 'name': 'pc3'}, {'target': 'pc4', 'name': 'pc4'}, {'target': 'pc5', 'name': 'pc5'}, {'target': 'pc6', 'name': 'pc6'}, {'target': 'pc7', 'name': 'pc7'}, {'target': 'pc8', 'name': 'pc8'}, {'target': 'pc9', 'name': 'pc9'}, {'target': 'pc10', 'name': 'pc10'}, {'target': 'pc11', 'name': 'pc11'}, {'target': 'pc12', 'name': 'pc12'}, {'target': 'pc13', 'name': 'pc13'}, {'target': 'pc14', 'name': 'pc14'}, {'target': 'pc15', 'name': 'pc15'}, {'target': 'includedPC1', 'name': 'Apache 2 Server for includedPC1'}, {'target': 'includedPC2', 'name': 'Apache 2 Server for includedPC1'}, {'target': 'localhost', 'name': 'Apache 2 Server for noc'}, {'target': 'pc1', 'name': 'Apache 2 Server for pc1'}, {'target': 'pc2', 'name': 'Apache 2 Server for pc2'}, {'target': 'pc3', 'name': 'Apache 2 Server for pc3'}, {'target': 'pc4', 'name': 'Apache 2 Server for pc4'}, {'target': 'pc5', 'name': 'Apache 2 Server for pc5'}, {'target': 'pc6', 'name': 'Apache 2 Server for pc6'}, {'target': 'pc7', 'name': 'Apache 2 Server for pc7'}, {'target': 'pc8', 'name': 'Apache 2 Server for pc8'}, {'target': 'pc9', 'name': 'Apache 2 Server for pc9'}, {'target': 'pc10', 'name': 'Apache 2 Server for pc10'}, {'target': 'pc11', 'name': 'Apache 2 Server for pc11'}, {'target': 'pc12', 'name': 'Apache 2 Server for pc12'}, {'target': 'pc13', 'name': 'Apache 2 Server for pc13'}, {'target': 'pc14', 'name': 'Apache 2 Server for pc14'}, {'target': 'pc15', 'name': 'Apache 2 Server for pc15'}, {'target': 'noc', 'name': 'Name Server Latency for noc'}, {'target': 'afnog.org', 'name': 'African Network Operators Group'}, {'target': 'nsrc.org', 'name': 'NSRC (Eugene, Oregon, USA)'}, {'target': 'ws.edu.isoc.org', 'name': 'ISOC Workshop Resource Centre (Eugene, Oregon, USA)'}, {'target': 'shell.uoregon.edu', 'name': 'Main User Box, University of Oregon (Eugene, Oregon, USA)'}, {'target': 'sageduck.org', 'name': 'sageduck.org'}], "Bogus smokeping example 2 test with inclusions" 31 | print(targets) 32 | 33 | conf_file = "tests/smokeping_example_configs/smokeping_example3.conf" 34 | targets = config_management.read_smokeping_config(conf_file) 35 | assert targets == [{'target': 'www.cdn77.com', 'name': 'ANYCAST CDN77 (AS60068 www.cdn77.com)'}, {'target': '1.1.1.1', 'name': 'ANYCAST Cloudflare (AS13335 1.1.1.1)'}, {'target': '192.175.48.1', 'name': 'ANYCAST DNS-OARC (AS112 192.175.48.1)'}, {'target': 'www.googleapis.com', 'name': 'ANYCAST Google API (AS15169 www.googleapis.com)'}, {'target': '8.8.8.8', 'name': 'ANYCAST Google DNS (AS15169 8.8.8.8)'}, {'target': 'drive.google.com', 'name': 'ANYCAST Google DRIVE (AS15169 drive.google.com)'}, {'target': '9.9.9.9', 'name': 'ANYCAST Quad9 (AS19281 9.9.9.9)'}, {'target': 'ns1.wordpress.com', 'name': 'ANYCAST WordPress (AS2635 ns1.wordpress.com)'}, {'target': 'ovh.es', 'name': '[FR] ISP OVH (AS16276 ovh.es)'}, {'target': 'nsa.online.net', 'name': '[FR] ISP Online.net (AS12876 nsa.online.net)'}, {'target': 'hetzner.com', 'name': '[DE] ISP Hetzner (AS24940 hetzner.com)'}], "Bogus smokeping example 3 test with inclusions" 36 | print(targets) 37 | 38 | if __name__ == "__main__": 39 | print("Example code for %s, %s" % (__intname__, __build__)) 40 | test_read_smokeping_config() 41 | -------------------------------------------------------------------------------- /traceroute_history/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/__init__.py -------------------------------------------------------------------------------- /traceroute_history/assets/app/app.calendar.js: -------------------------------------------------------------------------------- 1 | /* ====== Index ====== 2 | 3 | 1. CALENDAR JS 4 | 5 | ====== End ======*/ 6 | 7 | document.addEventListener('DOMContentLoaded', function() { 8 | var calendarEl = document.getElementById('calendar'); 9 | var year = new Date().getFullYear() 10 | var month = new Date().getMonth() + 1 11 | function n(n){ 12 | return n > 9 ? "" + n: "0" + n; 13 | } 14 | var month = n(month) 15 | 16 | var calendar = new FullCalendar.Calendar(calendarEl, { 17 | plugins: [ 'dayGrid' ], 18 | defaultView: 'dayGridMonth', 19 | 20 | eventRender: function(info) { 21 | var ntoday = moment().format('YYYYMMDD'); 22 | var eventStart = moment( info.event.start ).format('YYYYMMDD'); 23 | info.el.setAttribute("title", info.event.extendedProps.description); 24 | info.el.setAttribute("data-toggle", "tooltip"); 25 | if (eventStart < ntoday){ 26 | info.el.classList.add("fc-past-event"); 27 | } else if (eventStart == ntoday){ 28 | info.el.classList.add("fc-current-event"); 29 | } else { 30 | info.el.classList.add("fc-future-event"); 31 | } 32 | }, 33 | 34 | events: [ 35 | { 36 | title: 'All Day Event', 37 | description: 'description for All Day Event', 38 | start: year+'-'+month+'-01' 39 | }, 40 | { 41 | title: 'All Day Event', 42 | description: 'description for All Day Event', 43 | start: year+'-'+month+'-03' 44 | }, 45 | { 46 | title: 'All Day Event', 47 | description: 'description for All Day Event', 48 | start: year+'-'+month+'-05' 49 | }, 50 | { 51 | title: 'Long Event', 52 | description: 'description for Long Event', 53 | start: year+'-'+month+'-07', 54 | end: year+'-'+month+'-10' 55 | }, 56 | { 57 | groupId: '999', 58 | title: 'Repeating Event', 59 | description: 'description for Repeating Event', 60 | start: year+'-'+month+'-09T16:00:00' 61 | }, 62 | { 63 | groupId: '999', 64 | title: 'Repeating Event', 65 | description: 'description for Repeating Event', 66 | start: year+'-'+month+'-16T16:00:00', 67 | end: year+'-'+month+'-16T16:00:00' 68 | }, 69 | { 70 | title: 'Conference', 71 | description: 'description for Conference', 72 | start: year+'-'+month+'-11', 73 | end: year+'-'+month+'-13' 74 | }, 75 | { 76 | title: 'Meeting', 77 | description: 'description for Meeting', 78 | start: year+'-'+month+'-12T10:30:00', 79 | end: year+'-'+month+'-12T12:30:00' 80 | }, 81 | { 82 | title: 'Lunch', 83 | description: 'description for Lunch', 84 | start: year+'-'+month+'-12T12:00:00', 85 | end: year+'-'+month+'-12T12:00:00' 86 | }, 87 | { 88 | title: 'Meeting', 89 | description: 'description for Meeting', 90 | start: year+'-'+month+'-12T14:30:00', 91 | end: year+'-'+month+'-12T14:30:00' 92 | }, 93 | { 94 | title: 'Birthday Party', 95 | description: 'description for Birthday Party', 96 | start: year+'-'+month+'-13T24:00:00', 97 | end: year+'-'+month+'-13T24:00:00' 98 | }, 99 | { 100 | title: 'Long Event', 101 | description: 'description for Long Event', 102 | start: year+'-'+month+'-20', 103 | end: year+'-'+month+'-23' 104 | }, 105 | { 106 | groupId: '999', 107 | title: 'Repeating Event', 108 | description: 'description for Repeating Event', 109 | start: year+'-'+month+'-22T16:00:00' 110 | }, 111 | { 112 | title: 'Conference', 113 | description: 'description for Conference', 114 | start: year+'-'+month+'-24', 115 | end: year+'-'+month+'-27' 116 | }, 117 | { 118 | title: 'Meeting', 119 | description: 'description for Meeting', 120 | start: year+'-'+month+'-26T10:30:00', 121 | end: year+'-'+month+'-26T12:30:00' 122 | }, 123 | { 124 | title: 'Lunch', 125 | description: 'description for Lunch', 126 | start: year+'-'+month+'-26T12:00:00', 127 | end: year+'-'+month+'-26T12:00:00' 128 | }, 129 | { 130 | title: 'Meeting', 131 | description: 'description for Meeting', 132 | start: year+'-'+month+'-26T14:30:00', 133 | end: year+'-'+month+'-26T14:30:00' 134 | }, 135 | { 136 | title: 'Click for Google', 137 | description: 'description for Click for Google', 138 | url: 'http://google.com/', 139 | start: year+'-'+month+'-28', 140 | end: year+'-'+month+'-28' 141 | }, 142 | { 143 | title: 'Lunch', 144 | description: 'description for Lunch', 145 | start: year+'-'+month+'-30T12:00:00', 146 | end: year+'-'+month+'-31T12:00:00' 147 | }, 148 | { 149 | title: 'Meeting', 150 | description: 'description for Meeting', 151 | start: year+'-'+month+'-31T14:30:00', 152 | end: year+'-'+month+'-31T14:30:00' 153 | } 154 | ] 155 | }); 156 | 157 | calendar.render(); 158 | 159 | }); -------------------------------------------------------------------------------- /traceroute_history/assets/img/details_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/details_close.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/details_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/details_open.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc1.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc1a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc1a.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc1b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc1b.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc1c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc1c.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc2a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc2a.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc2b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc2b.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc2c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc2c.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc3a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc3a.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc3b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc3b.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc3c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc3c.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc4a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc4a.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc4b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc4b.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/cc4c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/cc4c.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/client.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/slide1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/slide1.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/slide2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/slide2.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/slide3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/slide3.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/slide4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/slide4.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/slider5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/slider5.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/slider6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/slider6.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/slider7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/slider7.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/elements/slider8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/elements/slider8.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/favicon.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/analytics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/analytics.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/calendar.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/chart-widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/chart-widgets.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/chat.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/chrome.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/contacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/contacts.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/ecommerce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/ecommerce.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/edge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/edge.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/firefox.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/general-widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/general-widgets.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/opera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/opera.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/safari.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/sleek.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/sleek.gif -------------------------------------------------------------------------------- /traceroute_history/assets/img/github/team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/github/team.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/lightenning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/lightenning.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/p1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/p1.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/p2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/p2.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/p3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/p3.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/pa1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/pa1.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/pa2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/pa2.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/pa3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/pa3.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/pa4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/pa4.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/pa5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/pa5.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/products/pa6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/products/pa6.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/shop/cart1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/shop/cart1.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/shop/cart2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/shop/cart2.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/sleek-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/sleek-icon.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/sort_asc.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/sort_both.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/ui-icons/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/ui-icons/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/ui-icons/ui-icons_444444_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/ui-icons/ui-icons_444444_256x240.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/ui-icons/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/ui-icons/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/ui-icons/ui-icons_555555_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/ui-icons/ui-icons_555555_256x240.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/ui-icons/ui-icons_777620_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/ui-icons/ui-icons_777620_256x240.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/ui-icons/ui-icons_777777_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/ui-icons/ui-icons_777777_256x240.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/ui-icons/ui-icons_cc0000_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/ui-icons/ui-icons_cc0000_256x240.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/ui-icons/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/ui-icons/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/Untitled-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/Untitled-1.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-1.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-10.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-11.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-12.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-2.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-3.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-4.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-5.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-6.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-7.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-8.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u-xl-9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u-xl-9.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u1.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u2.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u3.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u4.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u5.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u6.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u7.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/u8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/u8.jpg -------------------------------------------------------------------------------- /traceroute_history/assets/img/user/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deajan/traceroute_history/82cedcb468690966f88f85b43883130fdb30ce85/traceroute_history/assets/img/user/user.png -------------------------------------------------------------------------------- /traceroute_history/assets/plugins/bootstrap/css/bootstrap-reboot.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2018 The Bootstrap Authors 4 | * Copyright 2011-2018 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} 8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */ -------------------------------------------------------------------------------- /traceroute_history/assets/plugins/data-tables/datatables.bootstrap4.min.css: -------------------------------------------------------------------------------- 1 | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-sm>thead>tr>th{padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:0.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0} -------------------------------------------------------------------------------- /traceroute_history/assets/plugins/data-tables/datatables.bootstrap4.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | DataTables Bootstrap 4 integration 3 | ©2011-2017 SpryMedia Ltd - datatables.net/license 4 | */ 5 | var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", 9 | renderer:"bootstrap"});a.extend(d.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});d.ext.renderer.pageButton.bootstrap=function(b,l,v,w,m,r){var k=new d.Api(b),x=b.oClasses,n=b.oLanguage.oPaginate,y=b.oLanguage.oAria.paginate||{},g,h,t=0,u=function(c,d){var e,l=function(b){b.preventDefault(); 10 | a(b.currentTarget).hasClass("disabled")||k.page()==b.data.action||k.page(b.data.action).draw("page")};var q=0;for(e=d.length;q",{"class":x.sPageButton+" "+h,id:0===v&&"string"===typeof f?b.sTableId+"_"+f:null}).append(a("",{href:"#","aria-controls":b.sTableId,"aria-label":y[f],"data-dt-idx":t,tabindex:b.iTabIndex,"class":"page-link"}).html(g)).appendTo(c);b.oApi._fnBindAction(p,{action:f},l);t++}}}};try{var p=a(l).find(c.activeElement).data("dt-idx")}catch(z){}u(a(l).empty().html('