{"id":16897697,"url":"https://github.com/cevich/ringwrap","last_synced_at":"2025-08-02T13:08:12.928Z","repository":{"id":79003505,"uuid":"68044958","full_name":"cevich/ringwrap","owner":"cevich","description":"This program allows a wrapper command to be asynchronously enabled and disabled around another command","archived":false,"fork":false,"pushed_at":"2016-09-12T20:27:50.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T11:21:28.687Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cevich.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"LICENSE_LGPL","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-12T20:26:50.000Z","updated_at":"2016-09-12T20:27:51.000Z","dependencies_parsed_at":"2023-03-09T03:00:39.295Z","dependency_job_id":null,"html_url":"https://github.com/cevich/ringwrap","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cevich/ringwrap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cevich%2Fringwrap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cevich%2Fringwrap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cevich%2Fringwrap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cevich%2Fringwrap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cevich","download_url":"https://codeload.github.com/cevich/ringwrap/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cevich%2Fringwrap/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268393900,"owners_count":24243315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2024-10-13T17:39:20.437Z","updated_at":"2025-08-02T13:08:12.867Z","avatar_url":"https://github.com/cevich.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"#\n# Copyright (C) 2010 by Chris Evich \u003ccevich@redhat.com\u003e\n#\n#   This library is free software; you can redistribute it and/or\n#   modify it under the terms of the GNU Lesser General Public\n#   License as published by the Free Software Foundation; either\n#   version 2.1 of the License, or (at your option) any later version.\n#\n#   This library is distributed in the hope that it will be useful,\n#   but WITHOUT ANY WARRANTY; without even the implied warranty of\n#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n#   Lesser General Public License for more details.\n#\n#   You should have received a copy of the GNU Lesser General Public\n#   License along with this library; if not, write to the Free Software\n#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n#\n\n/**************************************************\n********************* QUICK DEMO ******************\n**************************************************/\n\n./ringwrap \"df -h \u003e /dev/null\" --init\n./ringwrap \"df -h \u003e /dev/null\" --begin\n./ringwrap \"df -h \u003e /dev/null\" # repeat as many times as you like\n./ringwrap \"df -h \u003e /dev/null\" --end\n# examine /tmp/ringwrap-strace/ contains only last 10 runs\n./ringwrap \"df -h \u003e /dev/null\" --fini\n\n/**************************************************\n********************* COMPLEX DEMO ****************\n**************************************************/\n\n./ringwrap -w \"strace -o @@@\" -k 10 -o /tmp/diskprob \"df -h \u003e /dev/null\" -i\n./ringwrap \"df -h \u003e /dev/null\" -b\n./ringwrap \"df -h \u003e /dev/null\" # repeat as many times as you like\n./ringwrap \"df -h \u003e /dev/null\" -e\n# Examine /tmp/diskprob, contains only final 10 straces of \"df -h \u003e /dev/null\"\n./ringwrap \"df -h \u003e /dev/null\" -s # usage statistics\n./ringwrap \"df -h \u003e /dev/null\" -f\n\n/**************************************************\n********************* DETAILS *********************\n**************************************************/\n\nThis program allows an arbitrary wrapper command to be \nasynchronously enabled and disabled around an arbitrary \nprimary command.  Once activated, the program will begin \nexecuting the wrapper command with the primary as it's \nfinal argument.\n\nThe intended use is, modifying the behavior of the primary \ncommand, from outside of it's execution context.  Enabling,\nor disabling the wrapping at will, and gathering execution\nstatistics.\n\nFor example, consider a network service that forks a new \nserver for each connection.  You can drop in ringwrap \nas the \"server\" in the configuration once, only to initialize \nand/or run limited straces or logging on it later w/o \nhaving to restart or interrupt the service. \n\nThe --keep and --outdir options enhance the functionality \nby generating a unique output directory and filename for \neach run, then purging all but the most recent.  The \nfilename is passed via the magic sequence \"@@@\" in the\nwrapped command.\n\nThe filename will be in the form:\n\n\u003coutdir\u003e/YYYY-MM-DD_HH:MM:SS_PID/\u003ccommand\u003e\n\nThe magic squence is not yet supported for use in the primary\ncommand.\n\nIf multiple instances of the same command will be wrapped with\ndiffering output options, the --unique option may be used to\ndistinguish them.\n\nShared memory segments and semaphores are used to serialize\naccess to wrapping state as well as output.  This is intended\nfor cases where hundreds or thousands of wrapped commands\nmay be executing at the same time.  \n\nReport bugs to Chris Evich \u003ccevich@redhat.com\u003e.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcevich%2Fringwrap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcevich%2Fringwrap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcevich%2Fringwrap/lists"}