{"id":24703001,"url":"https://github.com/jsonzilla/svn-targetprocess-aggregator","last_synced_at":"2026-04-15T23:31:40.811Z","repository":{"id":80800270,"uuid":"389094638","full_name":"jsonzilla/svn-targetprocess-aggregator","owner":"jsonzilla","description":"Tool for help you to integrate data from TargetProcess and SVN, for analysis.","archived":false,"fork":false,"pushed_at":"2022-11-11T19:59:28.000Z","size":420,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-22T04:27:12.268Z","etag":null,"topics":["api","play-framework","postgresql","scala","svn","targetprocess"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsonzilla.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"jsonzilla"}},"created_at":"2021-07-24T12:32:14.000Z","updated_at":"2022-06-25T17:28:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"85f11efc-301b-44bc-ba7d-a3a979ef5aa7","html_url":"https://github.com/jsonzilla/svn-targetprocess-aggregator","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jsonzilla/svn-targetprocess-aggregator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzilla%2Fsvn-targetprocess-aggregator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzilla%2Fsvn-targetprocess-aggregator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzilla%2Fsvn-targetprocess-aggregator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzilla%2Fsvn-targetprocess-aggregator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsonzilla","download_url":"https://codeload.github.com/jsonzilla/svn-targetprocess-aggregator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonzilla%2Fsvn-targetprocess-aggregator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271749047,"owners_count":24814114,"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-23T02:00:09.327Z","response_time":69,"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":["api","play-framework","postgresql","scala","svn","targetprocess"],"created_at":"2025-01-27T05:51:50.688Z","updated_at":"2026-04-15T23:31:35.770Z","avatar_url":"https://github.com/jsonzilla.png","language":"Scala","funding_links":["https://github.com/sponsors/jsonzilla"],"categories":[],"sub_categories":[],"readme":"# SVN TargetProcess Aggregator\r\n\r\nThis tool has been created to help you to integrate data TargetProcess and SVN repository data, for further analysis.\r\n\r\n## Requirements\r\n-   PostgresSQL [download](https://www.postgresql.org/download/)\r\n-   Java SDK 11 [download](https://www.oracle.com/technetwork/java/javase/downloads/index.html)\r\n-   Sbt [download](https://www.scala-sbt.org/download.html)\r\n\r\n\r\n## Installation and Configuration\r\n### Database\r\nCreate a user and database\r\n[link for example](https://www.postgresql.org/docs/8.0/static/sql-createuser.html)\r\n\r\n```\r\nCREATE USER \"user\" WITH PASSWORD 'password';\r\nCREATE DATABASE \"database\";\r\nGRANT ALL PRIVILEGES ON DATABASE \"database\" TO \"user\";\r\n```\r\n### Change database connection (/config/application.conf)\r\nThe default connection is a config for running in memory\r\n```conf\r\nslick.dbs.default.profile=\"slick.jdbc.H2Profile$\"\r\nslick.dbs.default.db.driver=\"org.h2.Driver\"\r\nslick.dbs.default.db.url=\"jdbc:h2:mem:play\"\r\nslick.dbs.default.db.user=sa\r\nslick.dbs.default.db.password=\"\"AliveConnection = true\r\n```\r\n\r\nChange to use a real database\r\n```conf\r\nslick.dbs.default.profile=\"slick.jdbc.PostgresProfile$\"\r\nslick.dbs.default.db.connectionPool = disabled\r\nslick.dbs.default.db.driver=\"org.postgresql.Driver\"\r\nslick.dbs.default.db.url=\"jdbc:postgresql:database_name?user=postgres\u0026password=default\"\r\nslick.dbs.default.db.keepAliveConnection=true\r\nslick.dbs.default.db.users=\"postgres\"\r\nslick.dbs.default.db.password=\"default\"\r\nslick.dbs.default.db.maxActive=2\r\nslick.dbs.default.db.maxConnections=20\r\nslick.dbs.default.db.numThreads=10Threads = 10\r\n```\r\n\r\n### Repository configuration (/config/application.conf)\r\n```conf\r\nrepo.user = \"your_user\"\r\nrepo.pass = \"pass\"\r\nrepo.url = \"https://svn...\"\r\n```\r\n\r\n### TargetProcess configuration (/config/application.conf)\r\nFor agile flow data aggregation using [TargetProcess] (www.targetprocess.com)\r\nCurrently only support basic authentication.\r\n```conf\r\ntask_model = {\r\n  patternParser = \"(#\\\\d)\\\\d+\"\r\n  patternSplit = \"#\"\r\n  separator = \"\"\r\n}\r\ntarget = {\r\n  user = \"user\"\r\n  pass = \"pass\"\r\n  url = \"https://example.tpondemand.com/api/v1\"\r\n}\r\n```\r\n\r\n#### Configure the task format (/config/application.conf)\r\nDefines how the information about the tasks is extracted\r\n```conf\r\npatternParser = \"(#\\\\d)\\\\d+\" //task or fix #NUMBER\r\npatternSplit = \"#\" //task or fix #NUMBER\r\nseparator = \"\"\r\n```\r\n\r\n### Devel\r\n```bash\r\n\u003e sbt \"-Dconfig.file=/... path .../application.conf\r\n$\u003e run\r\n```\r\n\r\n### Create structure in database\r\n```\r\ncurl --location --request POST 'http://127.0.0.1:9000/boot/YOUR_MAGIC_SECRET' \\\r\n--header 'X-API-Key: AbCdEfGhIjK1'\r\n```\r\n\r\n### Run the tool for populate the database\r\n```bash\r\ncurl --location --request POST 'http://127.0.0.1:9000/api/v1/updateall' \\\r\n--header 'X-API-Key: AbCdEfGhIjK1'\r\n```\r\n\r\n---\r\n\r\n## Check tests\r\nOpen console and run the following command\r\n```bash\r\n\u003e sbt test\r\n```\r\n\r\n---\r\n\r\n## Generate package\r\nRun this on __production__, generate the package to run the application\r\n```bash\r\n\u003e sbt universal:packageBin\r\n```\r\n\r\nAnd copy the generate 'package' from target.\r\n```bash\r\n\u003e ./path_generated/bin/target/universal/stage/bin/svn-targetprocess-aggregator\r\n```\r\n\u003e __Note:__ Remember to open port 9000 on server\r\n\r\nAfter configuration, run the application\r\n\r\n---\r\n## Auxiliar scripts\r\nAll the scripts are in the folder 'scripts'\r\n\r\nFirst remember to configure the the configuration file (/scripts/configuration.py)\r\n* boot.py - dispatch a command to create the database structure\r\n* configuration.py -  configure this script level variables\r\n* gemerate_reports.py - generate the reports\r\n* last_commits.py - get the last commits from the repository\r\n* update_auto.py - update the database automatically\r\n* LOC/configuration.py -  configure LOC script level variables\r\n* LOC/count_lines_json.py - count the lines of code in the json file\r\n\r\n---\r\n\r\n## API\r\nThis file defines all application routes (Higher priority routes first)\r\n### Authors\r\n* GET /api/v1/authors\r\n* GET /api/v1/authors/:id\r\n* GET /api/v1/authors/bugs/:author - get the bugs of an author\r\n\r\n### Commits\r\n* GET /api/v1/commits\r\n* GET /api/v1/commits/:id\r\n* GET /api/v1/commits/revision/:revision\r\n* GET /api/v1/commits/:from/to/:to\r\n* GET /api/v1/commits/custom/:customField/:fromTime/to/:toTime/csvQueryLocalDate\r\n* GET /api/v1/commits/custom/:customField/:fromTime/to/:toTime\r\n\r\n### Tasks\r\n* GET /api/v1/tasks\r\n* GET /api/v1/tasks/:id\r\n* GET /api/v1/tasks/task/:taskId - get the task by targetprocess id\r\n* GET /api/v1/tasks/nested/:parentId - get the tasks nested in a task\r\n\r\n### Commits tasks\r\n* GET /api/v1/committasks\r\n* GET /api/v1/committasks/:id\r\n\r\n### Files by commit\r\n* GET /api/v1/commitfiles\r\n* GET /api/v1/commitfiles/:id\r\n\r\n### Files\r\n* GET /api/v1/files\r\n* GET /api/v1/files/bugs - get the files with bugs related\r\n* GET /api/v1/files/:id\r\n\r\n### Target process custom fields\r\n* GET /api/v1/customfields\r\n* GET /api/v1/customfields/:id\r\n* GET /api/v1/customfields/field/:field\r\n\r\n### Dump\r\nGenerate a report like a dump for analysis this data in external tools\r\n* GET /api/v1/dump/:from/to/:to - from commit to commit\r\n* GET /api/v1/dump/:from/to/:to/csv - from commit to commit in csv format\r\n### Endpoints for update\r\n* POST /api/v1/updateall - force update all data\r\n* POST /api/v1/update - only update from the last commit stored in the database\r\n* POST /api/v1/update/custom/:customField - update based on a custom field like task or fix\r\n\r\n---\r\n\r\n## Database structure\r\nSql code to create the database structure, in the file\r\n```/scripts/database_structure.sql```.\r\n\r\nOverview of the database structure\r\n\r\n### API_KEY\r\nField Name\t| Field Type\r\n-------------|-------------\r\napi_key\t| Character Varying:I:U\r\nname\t| Character Varying\r\nactive\t| Boolean\r\nid\t| BigInt:I:U\r\n\r\n### API_LOG\r\nField Name\t| Field Type\r\n----------\t| -----------\r\ndate\t| Timestamp Without Time Zone\r\nip\t| Character Varying\r\napi_key\t| Character Varying:N\r\ntoken\t| Character Varying:N\r\nmethod\t| Character Varying\r\nuri\t| Character Varying\r\nrequest_body\t| Character Varying:N\r\nresponse_status\t| Integer\r\nresponse_body\t| Character Varying:N\r\nid\t| BigInt:I:U\r\n\r\n\r\n### API_TOKEN\r\nField Name\t| Field Type\r\n-------------|-------------\r\ntoken\tCharacter | Varying:I:U\r\napi_key\tCharacter | Varying\r\nexpiration_time\t| Timestamp Without Time Zone\r\nuser_id\t| BigInt\r\nid\t| BigInt:I:U\r\n\r\n\r\n### AUTHORS\r\nField Name\t| Field Type\r\n-------------|-------------\r\nauthor | Character Varying:I:U\r\nid\t| BigInt:I:U\r\n\r\n### COMMITFILES\r\nField Name |Field Type\r\n-------------|-------------\r\ntypeModification\t| Integer:N\r\ncopyPath_id\t| BigInt:N\r\ncopyRevision\t| BigInt:N\r\npath_id\t| BigInt\r\nrevision |\tBigInt\r\nid\t| BigInt:I:U\r\n\r\n### COMMITS\r\nField Name| Field Type\r\n-------------|-------------\r\nmessage\t| Character Varying:N\r\ntimestamp\t| Timestamp Without Time Zone:N\r\nrevision\t| BigInt:I:U\r\nauthor\t| BigInt\r\nid\t| BigInt:I:U\r\n\r\n### COMMITTASKS\r\nField Name\t| Field Type\r\n-------------|-------------\r\ntask_id |\tBigInt\r\ncommit_id |\tBigInt\r\nid |\tBigInt:I:U\r\n\r\n### CUSTOMFIELDS\r\nField Name |Field Type\r\n-------------|-------------\r\nfield_value\t| Character Varying:N\r\nfield\t| Character Varying\r\ntask_id\t| BigInt:I:U\r\nid |\tBigInt:I:U\r\n\r\n### FILES\r\nField Name| Field Type\r\n-------------|-------------\r\npath\t| Character Varying:I:U\r\nid |\tBigInt:I:U\r\n\r\n### TASKS\r\nField Name |\tField Type\r\n-------------|-------------\r\ntype_task\t| Character Varying:N\r\ntype_task_id |\tBigInt:N\r\nuser_story\t| BigInt:N\r\ntime_spend\t| Double Precision:N\r\nparent_id |\tBigInt:N\r\ntask_id\t| BigInt:I:U\r\nid\t| BigInt:I:U\r\n\r\n### USERS\r\nField Name| Field Type\r\n-------------|-------------\r\nemail\t| Character Varying:I:U\r\npassword | Character Varying\r\nname| Character Varying\r\nemailConfirmed |\tBoolean\r\nactive |\tBoolean\r\nid| BigInt:I:U\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsonzilla%2Fsvn-targetprocess-aggregator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsonzilla%2Fsvn-targetprocess-aggregator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsonzilla%2Fsvn-targetprocess-aggregator/lists"}