{"id":826,"name":"ClimateSERV","description":"This web application allows development practitioners, scientists/researchers, and government decision-makers to visualize and download historical rainfall data, vegetation condition data, and 180-day forecasts of rainfall and temperature to improve understanding of, and make improved decisions for, issues related to agriculture and water availability.","url":"https://github.com/SERVIR/ClimateSERV2","last_synced_at":"2026-04-08T02:30:29.919Z","repository":{"id":50486735,"uuid":"377942629","full_name":"SERVIR/ClimateSERV2","owner":"SERVIR","description":"ClimateSERV allows development practitioners, scientists/researchers, and government decision-makers to visualize and download historical rainfall data, vegetation condition data, and 180-day forecasts of rainfall and temperature to improve understanding of, and make improved decisions for, issues related to agriculture and water availability.","archived":false,"fork":false,"pushed_at":"2025-08-01T15:54:15.000Z","size":141236,"stargazers_count":9,"open_issues_count":12,"forks_count":1,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-02-11T01:08:41.420Z","etag":null,"topics":["chirps","climate","climateserv","emodis","esi","imerg","ndvi","servir","servirglobal"],"latest_commit_sha":null,"homepage":"https://climateserv.servirglobal.net/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SERVIR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2021-06-17T19:37:56.000Z","updated_at":"2025-08-01T15:54:18.000Z","dependencies_parsed_at":"2023-10-05T00:57:57.342Z","dependency_job_id":"ecfc96bb-2d5a-4394-b87d-4cda72584ec0","html_url":"https://github.com/SERVIR/ClimateSERV2","commit_stats":{"total_commits":1145,"total_committers":9,"mean_commits":"127.22222222222223","dds":0.2925764192139738,"last_synced_commit":"a6d00076bfde495aeb3c42a3a83dbc0c6dae80b6"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/SERVIR/ClimateSERV2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SERVIR","download_url":"https://codeload.github.com/SERVIR/ClimateSERV2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31416763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"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"}},"owner":{"login":"SERVIR","name":"SERVIR","uuid":"8176548","kind":"organization","description":"","email":null,"website":"https://www.servirglobal.net/","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/8176548?v=4","repositories_count":98,"last_synced_at":"2024-03-26T14:53:02.657Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/SERVIR","funding_links":[],"total_stars":166,"followers":52,"following":0,"created_at":"2022-11-03T22:46:29.899Z","updated_at":"2024-03-26T14:53:28.945Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SERVIR","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SERVIR/repositories"},"packages":[{"id":11733611,"name":"github.com/servir/climateserv2","ecosystem":"go","description":null,"homepage":null,"licenses":"other","normalized_licenses":["GPL-1.0+"],"repository_url":"https://github.com/servir/climateserv2","keywords_array":[],"namespace":null,"versions_count":1,"first_release_published_at":"2024-06-04T14:18:37.000Z","latest_release_published_at":"2024-06-04T14:18:37.000Z","latest_release_number":"v1.0.0","last_synced_at":"2025-10-29T20:15:16.431Z","created_at":"2025-06-05T11:17:35.233Z","updated_at":"2025-10-29T20:15:16.432Z","registry_url":"https://pkg.go.dev/github.com/servir/climateserv2","install_command":"go get github.com/servir/climateserv2","documentation_url":"https://pkg.go.dev/github.com/servir/climateserv2#section-documentation","metadata":{},"repo_metadata":{"id":50486735,"uuid":"377942629","full_name":"SERVIR/ClimateSERV2","owner":"SERVIR","description":"ClimateSERV allows development practitioners, scientists/researchers, and government decision-makers to visualize and download historical rainfall data, vegetation condition data, and 180-day forecasts of rainfall and temperature to improve understanding of, and make improved decisions for, issues related to agriculture and water availability.","archived":false,"fork":false,"pushed_at":"2025-02-07T15:08:14.000Z","size":141222,"stargazers_count":9,"open_issues_count":11,"forks_count":2,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-05-31T17:55:43.439Z","etag":null,"topics":["chirps","climate","climateserv","emodis","esi","imerg","ndvi","servir","servirglobal"],"latest_commit_sha":null,"homepage":"https://climateserv.servirglobal.net/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SERVIR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2021-06-17T19:37:56.000Z","updated_at":"2025-02-07T15:08:21.000Z","dependencies_parsed_at":"2023-10-05T00:57:57.342Z","dependency_job_id":"12aedc98-96c4-4e07-957a-2eca6c1d8b45","html_url":"https://github.com/SERVIR/ClimateSERV2","commit_stats":{"total_commits":1145,"total_committers":9,"mean_commits":"127.22222222222223","dds":0.2925764192139738,"last_synced_commit":"a6d00076bfde495aeb3c42a3a83dbc0c6dae80b6"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SERVIR","download_url":"https://codeload.github.com/SERVIR/ClimateSERV2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":258211594,"owners_count":22665402,"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","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"}},"repo_metadata_updated_at":"2025-06-05T11:25:49.443Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":5.757538697138725,"dependent_packages_count":5.395053785167736,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.57629624115323},"purl":"pkg:golang/github.com/servir/climateserv2","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/servir/climateserv2","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/servir/climateserv2","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/servir/climateserv2/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-06-05T10:04:33.895Z","issues_count":37,"pull_requests_count":50,"avg_time_to_close_issue":3897131.8846153845,"avg_time_to_close_pull_request":38.32,"issues_closed_count":26,"pull_requests_closed_count":50,"pull_request_authors_count":2,"issue_authors_count":2,"avg_comments_per_issue":0.7027027027027027,"avg_comments_per_pull_request":0.04,"merged_pull_requests_count":48,"bot_issues_count":0,"bot_pull_requests_count":19,"past_year_issues_count":1,"past_year_pull_requests_count":9,"past_year_avg_time_to_close_issue":21712.0,"past_year_avg_time_to_close_pull_request":26.77777777777778,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":9,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":2.0,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":3,"past_year_merged_pull_requests_count":9,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/issues","maintainers":[{"login":"billyz313","count":67,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/billyz313"}],"active_maintainers":[{"login":"billyz313","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/billyz313"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fservir%2Fclimateserv2/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fservir%2Fclimateserv2/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fservir%2Fclimateserv2/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fservir%2Fclimateserv2/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fservir%2Fclimateserv2/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":1982391,"maintainers_count":0,"namespaces_count":748632,"keywords_count":111330,"github":"golang","metadata":{"funded_packages_count":52718},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2025-10-30T05:50:02.839Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}},{"id":11733607,"name":"github.com/SERVIR/ClimateSERV2","ecosystem":"go","description":null,"homepage":null,"licenses":"other","normalized_licenses":["GPL-1.0+"],"repository_url":"https://github.com/SERVIR/ClimateSERV2","keywords_array":[],"namespace":null,"versions_count":1,"first_release_published_at":"2024-06-04T14:18:37.000Z","latest_release_published_at":"2024-06-04T14:18:37.000Z","latest_release_number":"v1.0.0","last_synced_at":"2025-10-29T20:15:16.794Z","created_at":"2025-06-05T11:17:32.767Z","updated_at":"2025-10-29T20:15:16.794Z","registry_url":"https://pkg.go.dev/github.com/SERVIR/ClimateSERV2","install_command":"go get github.com/SERVIR/ClimateSERV2","documentation_url":"https://pkg.go.dev/github.com/SERVIR/ClimateSERV2#section-documentation","metadata":{},"repo_metadata":{"id":50486735,"uuid":"377942629","full_name":"SERVIR/ClimateSERV2","owner":"SERVIR","description":"ClimateSERV allows development practitioners, scientists/researchers, and government decision-makers to visualize and download historical rainfall data, vegetation condition data, and 180-day forecasts of rainfall and temperature to improve understanding of, and make improved decisions for, issues related to agriculture and water availability.","archived":false,"fork":false,"pushed_at":"2025-02-07T15:08:14.000Z","size":141222,"stargazers_count":9,"open_issues_count":11,"forks_count":2,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-05-31T17:55:43.439Z","etag":null,"topics":["chirps","climate","climateserv","emodis","esi","imerg","ndvi","servir","servirglobal"],"latest_commit_sha":null,"homepage":"https://climateserv.servirglobal.net/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SERVIR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2021-06-17T19:37:56.000Z","updated_at":"2025-02-07T15:08:21.000Z","dependencies_parsed_at":"2023-10-05T00:57:57.342Z","dependency_job_id":"12aedc98-96c4-4e07-957a-2eca6c1d8b45","html_url":"https://github.com/SERVIR/ClimateSERV2","commit_stats":{"total_commits":1145,"total_committers":9,"mean_commits":"127.22222222222223","dds":0.2925764192139738,"last_synced_commit":"a6d00076bfde495aeb3c42a3a83dbc0c6dae80b6"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SERVIR","download_url":"https://codeload.github.com/SERVIR/ClimateSERV2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":258211589,"owners_count":22665401,"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","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"}},"repo_metadata_updated_at":"2025-06-05T11:25:49.431Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":5.757538697138725,"dependent_packages_count":5.395053785167736,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.57629624115323},"purl":"pkg:golang/github.com/%21s%21e%21r%21v%21i%21r/%21climate%21s%21e%21r%21v2","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/SERVIR/ClimateSERV2","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/SERVIR/ClimateSERV2","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/SERVIR/ClimateSERV2/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-06-05T10:04:33.895Z","issues_count":37,"pull_requests_count":50,"avg_time_to_close_issue":3897131.8846153845,"avg_time_to_close_pull_request":38.32,"issues_closed_count":26,"pull_requests_closed_count":50,"pull_request_authors_count":2,"issue_authors_count":2,"avg_comments_per_issue":0.7027027027027027,"avg_comments_per_pull_request":0.04,"merged_pull_requests_count":48,"bot_issues_count":0,"bot_pull_requests_count":19,"past_year_issues_count":1,"past_year_pull_requests_count":9,"past_year_avg_time_to_close_issue":21712.0,"past_year_avg_time_to_close_pull_request":26.77777777777778,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":9,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":2.0,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":3,"past_year_merged_pull_requests_count":9,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/issues","maintainers":[{"login":"billyz313","count":67,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/billyz313"}],"active_maintainers":[{"login":"billyz313","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/billyz313"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FSERVIR%2FClimateSERV2/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FSERVIR%2FClimateSERV2/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FSERVIR%2FClimateSERV2/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FSERVIR%2FClimateSERV2/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2FSERVIR%2FClimateSERV2/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":1982391,"maintainers_count":0,"namespaces_count":748632,"keywords_count":111330,"github":"golang","metadata":{"funded_packages_count":52718},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2025-10-30T05:50:02.839Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}}],"commits":{"id":1254421,"full_name":"SERVIR/ClimateSERV2","default_branch":"main","total_commits":1156,"total_committers":9,"total_bot_commits":15,"total_bot_committers":1,"mean_commits":128.44444444444446,"dds":0.28979238754325265,"past_year_total_commits":16,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":16.0,"past_year_dds":0.0,"last_synced_at":"2025-10-24T11:55:37.947Z","last_synced_commit":"ec9f8eccf12350215fa1816e13649c6d560fc1cc","created_at":"2023-03-27T11:40:22.125Z","updated_at":"2025-10-24T11:55:03.794Z","committers":[{"name":"BillyZ313","email":"billy.ashmall@nasa.gov","login":"billyz313","count":821},{"name":"Githika Tondapu","email":"githika.tondapu@nasa.gov","login":"gtondapu","count":153},{"name":"Roberto Fontanarosa","email":"robertofontanarosa@gmail.com","login":"rfontanarosa","count":107},{"name":"Roberto Fontanarosa","email":"robertofontanarosa@gmaiil.com","login":null,"count":46},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":15},{"name":"paul","email":"paullin3679@gmail.com","login":"paulslin","count":7},{"name":"SERVIRglobal","email":"SERVIRglobal","login":"SERVIRglobal","count":5},{"name":"Alex Goberna","email":"agoberna@andrew.cmu.edu","login":"agoberna","count":1},{"name":"Billy Ashmall","email":"bashmall@schopenhauer.socrates.work","login":null,"count":1}],"past_year_committers":[{"name":"BillyZ313","email":"billy.ashmall@nasa.gov","login":"billyz313","count":16}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-24T00:00:23.375Z","repositories_count":6087122,"commits_count":922303094,"contributors_count":35997990,"owners_count":1108838,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"SERVIR/ClimateSERV2","html_url":"https://github.com/SERVIR/ClimateSERV2","last_synced_at":"2025-08-31T09:36:17.369Z","status":null,"issues_count":38,"pull_requests_count":42,"avg_time_to_close_issue":4052148.68,"avg_time_to_close_pull_request":36.095238095238095,"issues_closed_count":25,"pull_requests_closed_count":42,"pull_request_authors_count":2,"issue_authors_count":3,"avg_comments_per_issue":0.631578947368421,"avg_comments_per_pull_request":0.023809523809523808,"merged_pull_requests_count":41,"bot_issues_count":0,"bot_pull_requests_count":14,"past_year_issues_count":2,"past_year_pull_requests_count":4,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":17.75,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":4,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":2,"past_year_merged_pull_requests_count":4,"created_at":"2023-05-09T10:38:02.625Z","updated_at":"2025-09-01T19:19:43.072Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/SERVIR%2FClimateSERV2/issues","issue_labels_count":{},"pull_request_labels_count":{"dependencies":17},"issue_author_associations_count":{"MEMBER":36,"NONE":2},"pull_request_author_associations_count":{"MEMBER":33,"CONTRIBUTOR":17},"issue_authors":{"billyz313":36,"mjwaterloo":1,"xcmyubuntu":1},"pull_request_authors":{"billyz313":33,"dependabot[bot]":17},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-30T00:00:25.546Z","repositories_count":11263014,"issues_count":35009938,"pull_requests_count":113611200,"authors_count":11042159,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":2},"past_year_pull_request_author_associations_count":{"MEMBER":2},"past_year_issue_authors":{"mjwaterloo":1,"xcmyubuntu":1},"past_year_pull_request_authors":{"billyz313":2},"maintainers":[{"login":"billyz313","count":69,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/billyz313"}],"active_maintainers":[{"login":"billyz313","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/billyz313"}]},"events":{"total":{"IssuesEvent":3,"WatchEvent":2,"DeleteEvent":3,"IssueCommentEvent":2,"PushEvent":25,"PullRequestEvent":8,"ForkEvent":1,"CreateEvent":3},"last_year":{"IssuesEvent":3,"WatchEvent":1,"IssueCommentEvent":2,"PushEvent":12,"PullRequestEvent":2,"ForkEvent":1,"CreateEvent":1}},"keywords":["chirps","climate","climateserv","emodis","esi","imerg","ndvi","servir","servirglobal"],"dependencies":[],"score":null,"created_at":"2023-09-11T11:54:36.055Z","updated_at":"2026-04-08T02:30:29.931Z","avatar_url":"https://github.com/SERVIR.png","language":"Python","category":"Climate Change","sub_category":"Climate Data Access and Visualization","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# ClimateSERV 2.0\n\n[![Django: 3.x](https://img.shields.io/badge/Django-3.x-blue)](https://www.djangoproject.com)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![SERVIR: Global](https://img.shields.io/badge/SERVIR-Global-green)](https://servirglobal.net)\n\nThis tool allows development practitioners, scientists/researchers, and government decision-makers to visualize and\ndownload historical rainfall data, vegetation condition data, and 180-day forecasts of rainfall and temperature to\nimprove understanding of, and make improved decisions for, issues related to agriculture and water availability.\nThese data can be accessed directly through the web application or can be accessed through the applications API\nusing ClimateSERVpy in your python application.  You can get the ClimateSERVpy python package using pip \n```shell\npip install climateserv\n```\nor conda\n```shell\nconda install -c servir climateserv\n```\n\n## Setup and Installation\n\n### Required\n\n- [Python 3.9.5 or greater](https://www.python.org/downloads/) (We suggest 3.9.5)\n- [Postgresql (version 13)](https://www.postgresql.org/download)\n- [THREDDS (version 4.6.14)](https://www.unidata.ucar.edu/software/tds/)\n\n### Environment\nThese instructions are written for a linux environment.  If you are installing on a different\nOS you will have to alter pathing and pathing variables.\n\nWe highly recommend following the structure we have in place for the application, which is:\n\n```/cserv2/django_app/ClimateSERV2```\n\nFollowing these directions should help to accomplish this effectively and ensure your application runs successfully.\n\n``` \nmkdir -p /cserv2/django_app\nmkdir -p /cserv2/tmp/logs\ncd /cserv2/django_app\ngit clone git@github.com:SERVIR/ClimateSERV2.git\n```\n\n\n\nDue to python package requirements we found it best to use a conda environment for ClimateSERV.\n\nWe use two environments, one for the database, and the other for the application.\n\n#### To setup the database in a conda environment:\n- Create the env\n\n```\nmkdir -p /cserv2/python_environments/conda/anaconda3/envs/\nconda create --prefix=/cserv2/python_environments/conda/anaconda3/envs/psqlenv python=3.9.5\nconda create --name psqlenv python=3.9.5\n```\n\n- enter the environment\n\n```\nconda activate psqlenv\n```\n\n- install postgresql via conda\n\n```\nconda install -y -c conda-forge postgresql\n```\n\n- create the base database\n\n``` \ncd /cserv2\nmkdir db\ncd db\n\ninitdb -D local_climateserv\n```\n\n- start the server modus/instance of postgres\n\n``` \npg_ctl -D local_climateserv -l logfile start\n```\n\n- create a non-superuser (more safety!)\n\n``` \ncreateuser --encrypted --pwprompt csadmin\n```\n\n- using this user, create inner database inside the base database\n\n``` \ncreatedb --owner=csadmin cs2_db\n\nconda deactivate\n```\n\n- Create database connection file\nCreate /cserv2/django_app/ClimateSERV2/climateserv2/data.json\nPaste the following connection properties inside it.  For the SECRET_KEY  \nmust be a large random value, and it must be kept secret.  For DEBUG, in \ndevelopment, set it to \"True\", for production set it to \"False\"\n\n``` \n{\n  \"NAME\": \"cs2_db\",\n  \"USER\": \"csadmin\",\n  \"PASSWORD\": \"PASSWORD_YOU_SET_FOR_THIS_USER\",\n  \"HOST\": \"127.0.0.1\",\n  \"SECRET_KEY\": \"Your_super_secret_key_for_django\"\n  \"DEBUG\": \"False\"\n}\n```\n\n#### To setup the application in a conda environment\nWith conda installed you should be able to run the following command to create the correct python \nenvironment, then activate it.\n\n```\nconda create --prefix=/cserv2/python_environments/conda/anaconda3/envs/climateserv2 python=3.9.5\nconda activate ClimateSERV2\n```\n\nYou will need to cd to your project directory, then run the following two installation commands.\nBe sure to complete the installations before moving on, they can take a little time, be patient.\n\n```\npip install -r requirements.txt\nconda install --file conda_requirements.txt\n```\n\nUpon completion, you will need to add one more global lib to broker the message queues.  To do this\nuse \n```shell\nsudo apt-get install rabbitmq-server\nsudo systemctl enable rabbitmq-server\nsudo service rabbitmq-server start\n\n```\n\nNow we can create a service and config file to start celery which is our task queue with focus on real-time processing.\nYou will need to create two files, one at /etc/systemd/system/celery.service and the other at /etc/conf.d/celery\nIn celery.service you will need the following (you may need to adjust paths)\n\n```shell\n[Unit]\nDescription=Celery Service\nAfter=rabbitmq-server.service network.target\nRequires=rabbitmq-server.service\nRuntimeDirectory=celery \n\n\n[Service]\nType=forking\nUser=www-data\nGroup=www-data\nEnvironmentFile=/etc/conf.d/celery\nWorkingDirectory=/cserv2/django_app/ClimateSERV2\nExecStart=/bin/bash -c '${CELERY_BIN} -A $CELERY_APP multi start $CELERYD_NODES \\\n    --pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \\\n    --loglevel=\"${CELERYD_LOG_LEVEL}\" $CELERYD_OPTS' \nExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait $CELERYD_NODES \\\n    --pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \\\n    --loglevel=\"${CELERYD_LOG_LEVEL}\"'\nExecReload=/bin/sh -c '${CELERY_BIN} -A $CELERY_APP multi restart $CELERYD_NODES \\\n    --pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \\\n    --loglevel=\"${CELERYD_LOG_LEVEL}\" $CELERYD_OPTS'\nRestart=always\n\n[Install]\nWantedBy=multi-user.target\n```\nAnd in /etc/conf.d/celery you can paste\n```shell\nCELERYD_NODES=\"w1 w2 w3\"\nDJANGO_SETTINGS_MODULE=\"climateserv2.settings\"\n\n# Absolute or relative path to the 'celery' command:\nCELERY_BIN=\"/cserv2/python_environments/conda/anaconda3/envs/climateserv2/bin/celery\"\n\n# App instance to use\nCELERY_APP=\"climateserv2\"\nCELERYD_MULTI=\"multi\"\n\n# Extra command-line arguments to the worker\nCELERYD_OPTS=\"--time-limit=300 --concurrency=8\"\nCELERYD_PID_FILE=\"/var/run/celery/%n.pid\"\nCELERYD_LOG_FILE=\"/var/log/celery/%n%I.log\"\n\n```\n\nCelery uses a temp directory that will need to be automatically created on reboot, to do this\ncreate /usr/lib/tmpfiles.d and paste the following inside:\n\n```shell\nD /var/run/celery 0777 root root - -\n```\n\nCreate this directory now manually, along with a couple others:\n```shell\nsudo mkdir /var/run/celery \nsudo chmod 777 /var/run/celery -R\n\nsudo mkdir /opt/celery\nsudo chmod 777 /opt/celery\n\nsudo mkdir /var/log/celery\nsudo chmod 777 /var/log/celery -R\n```\n\nYou should be able to enable and start celery now\n\n```shell\nsudo chmod 644 /etc/systemd/system/celery.service\nsudo systemctl daemon-reload\nsudo systemctl enable celery\nsudo service celery restart\n```\n\nyou should be able to begin application setup.  Start with \n\n```\npython manage.py migrate\n```\n\nThis will take care of setting up the database.  Next you will need a superuser, \nfollow the prompts when you run \n\n```\npython manage.py createsuperuser\n```\n\n### Application specific variables and config files:\n\nYou will need to add some paths and dataset information as follows:\n\n--- TBD ---\n\nAt this point you should be able to start the application.  From the root directory you can run the following two commands\n\n```\npython manage.py runserver\n```\n\nOf course running the application in this manor is only for development, we recommend installing\nthis application on a server and serving it through nginx using gunicorn.  To do this you will need to \nhave both installed on your server.  There are enough resources explaining in depth how to install them,\nso we will avoid duplicating this information.  We recommend adding a service to start the application\nby creating a .service file located at /etc/systemd/system.  We named ours climateserv2.service\nThe service file will contain the following.  If you chose to follow a different structure you will\nhave to update the paths.\n\n```\n[Unit]\nDescription=ClimateSERV daemon\nAfter=network.target\n\n[Service]\nUser=nginx\nGroup=nginx\nSocketUser=nginx\nWorkingDirectory=/cserv2/django_app/ClimateSERV2/climateserv2\naccesslog = \"/var/log/cserv2/gunicorn.log\"\nerrorlog = \"/var/log/cserv2/gunicornerror.log\"\nExecStart=/cserv2/python_environments/conda/anaconda3/envs/climateserv2/bin/gunicorn --timeout 60 --workers 5 --pythonpath '/cserv2/django_app/ClimateSERV2,/cserv2/python_environments/conda/anaconda3/envs/climateserv2/lib/python3.9/site-packages' --bind unix:/cserv2/socks/climateserv.sock wsgi:application  \n\n[Install]\nWantedBy=multi-user.target\n```\n\nNOTE: Directory for the sock must be created and owned by nginx user.\n\nYou should now be able to start the application using the service, however we will set up some alias commands to \nmake things a bit easier, as permissions sometimes get in the way.  To create these you can create a new file\nlocated at /etc/profile.d/ and name it climateserv_alias.sh.  Add the alias commands you would like from below.\nIf you chose to use a different structure for the application, you will have to update the paths below.\n\n### Suggested server aliases\n```\nalias cs2='conda activate ClimateSERV2'\n\nalias d='conda deactivate'\n\nalias so='sudo chown nginx /cserv2/django_app/ClimateSERV2 -R; sudo chown -R nginx /cserv2/tmp; sudo chmod 777 /cserv2/tmp -R; sudo chmod 777 /var/log/cserv2/climateserv2.log; sudo chown -R nginx /var/log/cserv2'\n\nalias uo='sudo chown -R ${USER} /cserv2/django_app/ClimateSERV2; sudo chown -R ${USER} /cserv2/tmp; sudo chmod 777 /cserv2/tmp -R; sudo chmod 777 /var/log/cserv2/climateserv2.log; sudo chown -R ${USER} /var/log/cserv2'\n\nalias cstart='sudo service climateserv2 restart; sudo service nginx restart; so'\n\nalias cstop='sudo pkill -f gunicorn; sudo service nginx stop'\n\nalias chome='cd /cserv2/django_app/ClimateSERV2'\n\nalias crestart='cstop; cstart;'\n```\n\n## Contact\n\n### Software Developers\n\n- [Billy Ashmall (NASA/USRA)](https://github.com/billyz313)\n- [Roberto Fontanarosa (Former NASA/USRA)](https://github.com/rfontanarosa)\n- [Alexandre Goberna (NASA/USRA)](https://github.com/agoberna)\n- [Githika Tondapu (NASA/USRA)](https://github.com/gtondapu)\n\n### Systems Engineering\n\n- Lance Gilliland (NASA/Jacobs)\n- Francisco Delgado (NASA/USRA)\n\n### Science Team\n\n- Brent Roberst (NASA)\n- Ashutosh Limaye (NASA)\n- Eric Anderson (NASA)\n\n\n\n## License and Distribution\n\nClimateSERV 2.0 is distributed by SERVIR under the terms of the MIT License. See\n[LICENSE](https://github.com/SERVIR/ClimateSERV2/blob/master/LICENSE) in this directory for more information.\n\n## Privacy \u0026 Terms of Use\n\nClimateSERV abides to all of SERVIR's privacy and terms of use as described\nat [https://servirglobal.net/Privacy-Terms-of-Use](https://servirglobal.net/Privacy-Terms-of-Use).\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["optimize","archiving","transforms","measur","animals","observation","generic","conversion","projection","compose"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/826","html_url":"https://ost.ecosyste.ms/projects/826"}