{"id":49567423,"url":"https://github.com/internethealthreport/raclette","last_synced_at":"2026-05-03T12:04:22.273Z","repository":{"id":94118241,"uuid":"137150464","full_name":"InternetHealthReport/raclette","owner":"InternetHealthReport","description":"RTT analysis using RIPE Atlas traceroutes","archived":false,"fork":false,"pushed_at":"2025-08-26T08:16:44.000Z","size":43843,"stargazers_count":8,"open_issues_count":3,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-07T18:54:19.410Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/InternetHealthReport.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-06-13T02:12:29.000Z","updated_at":"2025-08-26T08:22:53.000Z","dependencies_parsed_at":"2023-11-07T13:51:35.231Z","dependency_job_id":null,"html_url":"https://github.com/InternetHealthReport/raclette","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/InternetHealthReport/raclette","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternetHealthReport%2Fraclette","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternetHealthReport%2Fraclette/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternetHealthReport%2Fraclette/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternetHealthReport%2Fraclette/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/InternetHealthReport","download_url":"https://codeload.github.com/InternetHealthReport/raclette/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternetHealthReport%2Fraclette/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32568037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-03T12:04:17.202Z","updated_at":"2026-05-03T12:04:22.257Z","avatar_url":"https://github.com/InternetHealthReport.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# raclette: Human-friendly monitoring of Internet delays\n\nRaclette simplifies the analysis of numerous traceroute results by merging results and adding semantics. For example, one can use raclette to read millions traceroute results from RIPE Atlas API and then query raclette for delays between “Amsterdam, NL” and “AS15169” (Google) to obtain the median Round Trip Times (RTTs) between all vantage points in Amsterdam and all Google IP addresses found in traceroutes.\n\n## Requirements\n- Python 3+\n- pip (to install required python libraries)\n\n## Install\nGet the latest source files:\n```\ngit clone git@github.com:InternetHealthReport/raclette.git\n```\n\nInstall dependencies, install raclette, and feed cache directory:\n```\ncd raclette\nsudo pip3 install -r requirements.txt \npython3 setup.py build_ext --inplace\nsudo python3 setup.py install\nmkdir cache\nwget https://ftp.ripe.net/ripe/ipmap/geolocations-latest -O cache/geolocations_ipmap.csv.bz2 \n```\n\n\n## Example\nIn this example we'll look at delay changes for SMW3 cable failures and ASC cable activation. For that we look at Atlas anchoring measurements from September 3rd to 5th, 2018.\n\n### Configuration file\nThe first step is to make a configuration file that will describe the start/end times, the measurement IDs, and the output directory. For this example the configuration file looks like this ([also available in the source files)](https://github.com/InternetHealthReport/raclette/blob/master/conf/asc-start.conf):\n```\n[main]\n\n[io]\n# Options for the Atlas REST API\nstart = 2018-09-02T12:00\nstop = 2018-09-06T12:00\n# Fetch data by chunks of chunk_size seconds. Set a smaller value if you have\n# memory problems\nchunk_size = 1800\nmsm_ids =  1748022, 1748024, 11645084, 11645087, 2244316, 2244318, 2244316, 2244318, 2435592, 2435594, 1796567, 1796569, 2904335, 2904338, 1618360, 1618362, 7970886, 7970889, 7970886, 7970889, 6886972, 6886975, 12237261 \nprobe_ids = \n\n# Options for the output\nresults = results/ASC_start/results_%(start)s.sql\nlog = results/ASC_start/log_%(start)s.log\n\n[timetrack]\nconverter = allin_cy\n\n[tracksaggregator]\nwindow_size = 1800\nsignificance_level = 0.05\n# ignore links visited by small number of tracks/traceroutes\nmin_tracks = 3 \n\n[anomalydetector]\nenable=1\n\n[lib]\nip2asn_directory = raclette/lib/\nip2asn_db = data/rib.20180701.pickle\nip2asn_ixp =\n```\n\nThe most important options are:\n- start, stop: The beginning and end time of the measurement period\n- msm_ids: The atlas measurements for which we want traceroutes\n- log: The log file used for this run\n- results: All results are stored in this file. This a sqlite database.\n\nFor this example we save this file to conf/asc-start.conf.\n\n### Traceroute analysis\nTo download traceroute and compute delays just run the following command:\n```\npython raclette/raclette.py -C conf/asc-start.conf\n```\nThis is going to take about 30 minutes, it downloads four days of traceroutes.\nYou can follow the progress in the log file with the following command:\n```\ntail -F results/ASC_start/log_2018-09-02T12:00.log\n```\n\n### Looking at the results\nAll results are stored in a sqlite database. The filename is the one you gave in the configuration file (io/results).\nRaclette comes with a script to easily plot graphs from that database. For example, to plot delays between Melbourne and Singapore use the following commands:\n```\npython raclette/plotter.py results/ASC_start/results_2018-09-02T12:00.sql  '%Melbourne%' '%Singapore%'\n```\nThe following graph will be save in the fig/ directory:\n![SMW3 cut and ASC start](http://ihr.iijlab.net/static/ihr/Melbourne_Singapore_median_expid1_diffrtt_time.png)\nThe graph shows delay changes on Sep.3rd due to a submarine cable cut (SMW3) between Singapore and Australia and the start of a new submarine cable (ASC) on Sep.5th.\n\n### Miscellaneous\nIf you have executed raclette.py several times with the same results file. The results for each instance are stored with a different experiment ID (cf. the field expid in the database). To plot with results from the third execution:\n```\npython raclette/plotter.py results/ASC_start/results_2018-09-02T12:00.sql  '%Melbourne%' '%Singapore%' 3\n```\n\nYou can also directly query the database with a sqlite client. The table you want to look at is diffrtt:\n```\nsqlite3 results/ASC_start/results_2018-09-02T12:00.sql\nsqlite\u003e .schema diffrtt\nCREATE TABLE diffrtt (ts integer, startpoint text, endpoint text, median real, confhigh real, conflow real, nbtracks integer, nbprobes integer, entropy real, hop integer, expid integer, foreign key(expid) references experiment(id));\n[...]\nsqlite\u003e .headers on\nsqlite\u003e select * from diffrtt limit 10;\nts|startpoint|endpoint|median|confhigh|conflow|nbtracks|nbprobes|entropy|hop|expid\n1535890500|PB20092|AS48441v4|0.597|0.743|0.503|4|1|0.0|1|3\n1535890500|PB20092|IPv4|311.129|344.056|185.155|22|1|0.0|3|3\n1535890500|PB20092|AS12389v4|167.621|172.017|2.027|4|1|0.0|2|3\n1535890500|PB20092|IX438v4|184.429|185.155|181.18|4|1|0.0|3|3\n1535890500|PB20092|AS4637v4|340.924|348.105|264.141|4|1|0.0|4|3\n1535890500|AS48441v4|AS12389v4|165.556|167.145|1.635|4|1|0.0|1|3\n1535890500|AS48441v4|IPv4|346.223|348.654|343.459|18|1|0.0|3|3\n1535890500|IPv4|AS12389v4|22.067|22.677|1.644|6|2|0.918295834054489|1|3\n1535890500|AS48441v4|IX438v4|182.547|184.018|180.735|4|1|0.0|2|3\n1535890500|IPv4|IX438v4|14.885|15.534|14.144|669|51|0.96986633428238|1|3\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finternethealthreport%2Fraclette","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finternethealthreport%2Fraclette","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finternethealthreport%2Fraclette/lists"}