{"id":19541873,"url":"https://github.com/imcf/auto-tx","last_synced_at":"2025-08-12T18:14:17.328Z","repository":{"id":150382379,"uuid":"103033711","full_name":"imcf/auto-tx","owner":"imcf","description":"AutoTx - an intelligent background file transfer service for Windows.","archived":false,"fork":false,"pushed_at":"2025-07-16T09:03:56.000Z","size":643,"stargazers_count":27,"open_issues_count":10,"forks_count":1,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-07-16T23:00:11.132Z","etag":null,"topics":["data-transfer","dotnet","email-notification","service","spooling","transfer-service","windows"],"latest_commit_sha":null,"homepage":"https://git.scicore.unibas.ch/vamp/auto-tx","language":"C#","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/imcf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2017-09-10T14:01:00.000Z","updated_at":"2025-07-16T22:34:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"ebf98190-5acb-47ba-a237-5d717d762648","html_url":"https://github.com/imcf/auto-tx","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/imcf/auto-tx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcf%2Fauto-tx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcf%2Fauto-tx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcf%2Fauto-tx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcf%2Fauto-tx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imcf","download_url":"https://codeload.github.com/imcf/auto-tx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcf%2Fauto-tx/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270110278,"owners_count":24529028,"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-12T02:00:09.011Z","response_time":80,"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":["data-transfer","dotnet","email-notification","service","spooling","transfer-service","windows"],"created_at":"2024-11-11T03:12:14.340Z","updated_at":"2025-08-12T18:14:17.302Z","avatar_url":"https://github.com/imcf.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![AutoTx logo][img_autotx_logo] AutoTx - AutoTransfer Service\n\nAutoTx is a Windows service doing background file transfers from a local disk to\na network share, licensed under the [GPLv3](LICENSE), developed and provided by\nthe [Imaging Core Facility (IMCF)][web_imcf] at the [Biozentrum][web_bioz],\n[University of Basel][web_unibas], Switzerland.\n\nIt is primarily designed and developed for getting user-data off microscope\nacquisition computers **after acquisition** (i.e. not in parallel!) with these\ngoals:\n\n- The user owning the data should be able to log off from the computer after\n  initiating the data transfer, enabling other users to log on while data is\n  still being transferred.\n- Any other interactive session at the computer must not be disturbed by the\n  background data transfer (in particular any data acquisition done by the next\n  user at the system).\n- No additional software has to be operated by the user for initiating the\n  transfer, avoiding the need for learning yet another tool.\n\n## Features\n\n- **User-initiated:** data is actively \"handed over\" to the service by the user\n  to prevent interfering with running acquisitions.\n- **Monitoring of system-critical parameters:** the service has a number of\n  configurable system parameters that are constantly being monitored. If one of\n  them is outside their defined valid range, any running transfer will be\n  immediately suspended and no new transfers will be started.\n- **Auto-Resume:** if a transfer is interrupted due to system limitations or the\n  operating system being shut down the transfer gets automatically resumed as\n  soon as possible without requiring any user interaction.\n- **Email notifications:** the user is notified via email of completed\n  transfers, as well as on transfer interruptions (system being shutdown or\n  similar).\n- **Error reporting:** in addition to user notifications, the service will send\n  error notifications via email to a separate admin address. Optionally, the\n  service offers the possibility to monitor free disk space on the local disks\n  and send notifications to the admins as well. Various measures are implemented\n  to prevent the service from flooding you with emails.\n- **Tray Application:** complementary to the service an application running in\n  the system tray is provided, showing details on what's going on to the user.\n- **Headless and GUI:** submitting a folder for transfer can either be done by\n  dropping it into a specific \"*incoming*\" folder (using the File Explorer or\n  some post-acquisition script or whatever fits your scenario) or by using the\n  guided folder selection dialog provided through the tray app context menu.\n\n## Concept\n\nThe service is expected to operate in an *ActiveDirectory* (AD) environment,\nwith a dedicated AD-account (referred to as the *service account*) being used to\nrun the service on the client computer(s). Furthermore, a network share is\nexpected (currently only a single one is supported) where the service account\nhas appropriate permissions to copy data to.\n\nFor any user that should be allowed to use the transfer service, a dedicated\nfolder has to exist on this network share, the name of the folder being the\n(short) AD account name (i.e. the login name or *sAMAccountName*) of the user.\n\nAfter the user initiates a transfer (i.e. hands over a folder to the AutoTx\nservice), the folder gets **immediately** moved to the *spooling* location on\nthe same disk. This is done to prevent users from accidentially messing with\nfolders subject to being transferred as well as for internal bookkeeping of what\nhas to be transferred.\n\nWhen no other transfer is running and all system parameters are within their\nvalid ranges, the AutoTx service will start copying the files and folders to a\ntemporary transfer directory inside the target location. Only when a transfer\nhas completed, it will be moved from the temporary location over to the user's\nfolder. This has the benefit that a user can't accidentially access data from\nincomplete transfers as well as it serves as a kind of implicit notification: if\na folder shows up in their location, the user will know it has been fully\ntransferred.\n\nOnce the transfer is completed the folder is moved from the local *spooling*\ndirectory to a \"*grace*\" location inside the spooling directory hierarchy. This\nis done to prevent accidentially deleting user data. Currently no automatic\ndeletion of data is implemented. Instead, the service keeps track of the grace\nlocation and will send notification emails to the admin once a given time\nperiod has expired (defaulting to 30 days).\n\n## Under the hood\n\nFor the actual transfer task, the service is using a C# wrapper for the\nMicrosoft RoboCopy tool called [RoboSharp][web_robosharp].\n\nLogging is done using the amazing [NLog][web_nlog] framework, allowing a great\ndeal of flexibility in terms of log levels, targets (file, email, eventlog) and\nrules.\n\n## Requirements\n\n- **ActiveDirectory integration:** no authentication mechanisms for the target\n  storage are currently supported, meaning the function account running the\n  service on the client has to have local read-write permissions as well as full\n  write permissions on the target location. The reason behind this is to avoid\n  having to administer local accounts on all clients as well as having easy\n  access to user information (email addresses, ...).\n- **Permissions:** for the CPU load monitoring to work, the function account has\n  to be a member of the \"*Performance Monitor Users*\" group, either via GPO /\n  ActiveDirectory or by adding it to the corresponding local group on each\n  client.\n- **.NET Framework:** version 4.5 required.\n- **Windows 7 / Server 2012 R2:** the service has been tested on those versions\n  of Windows, other versions sharing the same kernels (*Server 2008 R2*,\n  *Windows 8.1*) should be compatible as well but have yet been tested.\n- **64 bit:** currently only 64-bit versions are available (mostly due to lack\n  of options for testing), 32-bit support is planned though.\n\n\n# Installation\n\nSee the [instructions for installing the service](INSTALLATION.md) for details.\n\n# Operation\n\n## Configuration\n\nThe AutoTx service configuration is done through two XML files. They are\nstructured in a very simple way and well-commented to make them easily\nreadable. The first file `config.common.xml` defines settings which are common\nto all AutoTx installations in the same network. The second file contains the\nhost-specific settings for the service and is using the machine's hostname for\nits file name (followed by the `.xml` suffix). Both files are located in the\n`conf/` folder inside the service installation directory and share the exact\nsame syntax with the host-specific file having priority (i.e. all settings\ndefined in the common file can be overridden in the host-specific one).\n\nHaving the configuration in this *layered* way allows an administrator to have\nthe exact same `conf/` folder on all hosts where AutoTx is installed, thus\ngreatly simplifying automated management.\n\nExample config files (fully commented) are provided with the source code:\n\n- [A minimal set](Resources/conf-minimal/) of configuration settings required\n  to run the service.\n- [The full set](Resources/conf/) of all possible configuration settings.\n\n## Email-Templates\n\nNotification emails to users are based on the templates that can be found in\n[Mail-Templates](Resources/Mail-Templates) subdirectory of the service\ninstallation. Those files contain certain keywords that will be replaced with\ncurrent values by the service before sending the mail. This way the content of\nthe notifications can easily be adjusted without having to re-compile the\nservice.\n\n## Logging\n\nThe Windows Event Log seems to be a good place for logging if you have a proper\nmonitoring solution in place, which centrally collects and checks it. Since we\ndon't have one, and none of the other ActiveDirectory setups known to us have on\neither, the service places its log messages in a plain text file in good old\nUnix habits.\n\nEverything that needs attention is written into a file called\n`\u003cHOSTNAME\u003e.AutoTx.log` in the `var/` subdirectory of the service's installation\ndirectory. The contents of the log file can be monitored in real-time using the\nPowerShell command `Get-Content -Wait \"$($env:COMPUTERNAME).AutoTx.log\"` or by\nrunning the [Watch-Logfile.ps1](Scripts/Watch-Logfile.ps1) script.\n\nThe log level can be set through the configuration file.\n\n## Status\n\nSame as for the log messages, the service stores its status in a file, just this\nis in XML format so it is easily usable from C# code using the core\nSerialization / Deserialization functions. Likewise, this file is to be found in\nthe `var/` directory and called `status.xml`.\n\n## Grace Location Cleanup\n\nAfter a transfer has completed, the service moves all folders of that transfer\ninto one subfolder inside the `$ManagedDirectory/DONE/\u003cusername\u003e/` location. The\nsubfolders are named with a timestamp `YYYY-MM-DD__hh-mm-ss`. The grace location\nchecks are done\n - at service startup\n - after a transfer has finished\n - once every *N* hours, configurable for every host\n\n## Updates\n\nThe service comes with a dedicated updater to facilitate managing updates and\nconfigurations on many machines. See the [Updater Readme](Updater/README.md) for\nall the details.\n\n# Contributing\n\nPlease see the [Development And Contribution Guide](CONTRIBUTING.md) for details\nabout compiling from source, filing pull requests etc.\n\n\n[img_autotx_logo]: https://git.scicore.unibas.ch/vamp/auto-tx/raw/master/Resources/auto-tx-logo.png\n\n[web_imcf]: https://www.biozentrum.unibas.ch/imcf\n[web_bioz]: https://www.biozentrum.unibas.ch/\n[web_unibas]: https://www.unibas.ch/\n[web_robosharp]: https://github.com/tjscience/RoboSharp\n[web_robosharp_fork]: https://git.scicore.unibas.ch/vamp/robosharp\n[web_nlog]: http://nlog-project.org/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimcf%2Fauto-tx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimcf%2Fauto-tx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimcf%2Fauto-tx/lists"}