SlideRule Earth
Process ICESat2 datasets in the cloud through REST API calls to SlideRule web services.
https://github.com/slideruleearth/sliderule
Category: Sustainable Development
Sub Category: Environmental Satellites
Keywords from Contributors
elevation-data icesat-2 gedi glacier geospatial-analysis cloud-computing open-science pangeo closember community-driven
Last synced: about 6 hours ago
JSON representation
Repository metadata
Server and client framework for on-demand science data processing in the cloud
- Host: GitHub
- URL: https://github.com/slideruleearth/sliderule
- Owner: SlideRuleEarth
- License: other
- Created: 2020-05-04T23:34:29.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2025-04-24T20:04:54.000Z (3 days ago)
- Last Synced: 2025-04-24T20:25:21.735Z (3 days ago)
- Language: C++
- Homepage: https://slideruleearth.io
- Size: 48.5 MB
- Stars: 40
- Watchers: 6
- Forks: 12
- Open Issues: 181
- Releases: 103
-
Metadata Files:
- Readme: README.md
- License: LICENSE
README.md
sliderule
A cloud-native framework for on-demand science data processing.
This repository is for SlideRule developers and contains the source code for the SlideRule server, clients, and supporting services like the documentation website.
If you are a science data user interested in using SlideRule to process Earth science data, you can get started right away by checking out the installation instructions on our website, https://slideruleearth.io.
I. Prerequisites
-
Basic build environment
- For Ubuntu 20.04:
$ sudo apt install build-essential libreadline-dev liblua5.3-dev
- For CentOS 7:
$ sudo yum group install "Development Tools" $ sudo yum install readline readline-devel $ wget http://www.lua.org/ftp/lua-5.3.6.tar.gz $ tar -xvzf lua-5.3.6.tar.gz $ cd lua-5.3.6 $ make linux $ sudo make install
-
CMake (3.13.0 or greater)
-
For dependencies associated with a specific package, see the package readme at
packages/{package}/README.md
for additional installation instructions. -
For debug builds, there are additional tools that are needed for static analysis:
$ sudo apt install clang clang-tidy cppcheck
II. Building with CMake
From the root directory of the repository:
make config
make
sudo make install
This will build the following binaries:
sliderule
: console application
and perform the following installations:
/usr/local/bin
: applications/usr/local/include/sliderule
: class header files for plugin development/usr/local/etc/sliderule
: plugins, configuration files, and scripts
To take full control of the compile options exposed by cmake (e.g. disable plugin compilation), run the following commands in the root directory (or from anywhere as long as you point to the CMakeLists.txt
file in the root directory):
mkdir -p build
cd build; cmake <options> ..
make
sudo make install
For help and all available targets type make help
.
Options include:
-DINSTALLDIR=[prefix] location to install sliderule
default: /usr/local
-DSHARED_LIBRARY=[ON|OFF] build sliderule as a shared library (overrides all other targets)
default: OFF
-DENABLE_ADDRESS_SANITIZER=[ON|OFF] instrument code with for detecting memory errors
default: OFF
-DENABLE_CODE_COVERAGE=[ON|OFF] instrument code for reporting code coverage
default: OFF
-DENABLE_TIME_HEARTBEAT=[ON|OFF] replace system gettime calls with 1KHz timer (useful for reducing CPU load when timestamping lots of events)
default: OFF
-DENABLE_CUSTOM_ALLOCATOR=[ON|OFF] override new and delete operators for debugging memory leaks
default: OFF
-DENABLE_H5CORO_ATTRIBUTE_SUPPORT=[ON|OFF] enable reading attribute fields of H5 files (performance penalty)
default: OFF
-DENABLE_TRACING=[ON|OFF] compile in trace points
default: OFF
-DENABLE_TERMINAL=[ON|OFF] compiles in print2term function calls
default: ON
III. Quick Start
Here are some quick steps you can take to setup a basic development environment and get up and running.
1. Install the base packages needed to build SlideRule
The SlideRule framework is divided up into packages (which are compile-time modules) and plugins (which are run-time modules). The core package provides the base functionality of SlideRule and must be compiled. All other packages and all plugins extend the functionality of SlideRule and are conditionally compiled.
2. Install a recent version of CMake (>= 3.13.0)
SlideRule uses a relatively recent version of CMake in order to take advantage of some of the later improvements to the tool. If using Ubuntu 20.04 or later, then the system package is sufficient.
3. Install all dependencies
If additional packages are needed, navigate to the package's readme (the README.md file found in each package directory) for instructions on how to build and configure that package. Once the proper dependencies are installed, the corresponding option must be passed to cmake to ensure the package is built.
For example, if the AWS package was needed, the installation instructions at packages/aws/README.md
need to be followed, and then the -DUSE_AWS_PACKAGE=ON
needs to be passed to cmake when configuring the build.
4. Build and install SlideRule
The provided Makefile has targets for typical configurations. See the II. Building with CMake section for more details.
5. Running SlideRule as a stand-alone application
SlideRule is normally run wuth a lua script passed to it at startup in order to configure which components are run. "Using" SlideRule means developing the lua scripts needed to configure and instantiate the needed SlideRule components. There are a handful of stock lua scripts provided in the repository that can be used as a starting point for developing a project-specific lua script.
A REST server running at port 9081 can be started via:
$ sliderule targets/slideruleearth-aws/server.lua <config.json>
A self-test that dynamically checks which packages are present and runs their associated unit tests can be started via:
$ sliderule targets/slideruleearth-aws/test_runner.lua
Alternatively, SlideRule can be run as an interactive Lua interpreter. Just type sliderule
to start and ctrl-c
to exit. The interactive Lua environment is the same enviroment present to the scripts.
V. Directory Structure
This section details the directory structure of the SlideRule repository to help you navigate where different functionality resides.
clients
Contains the source code for the different clients that make interacting with SlideRule easier. These clients often support additional functionality to aid science data investigations. See https://slideruleearth.io/rtd/ for more details.
docs
Contains the source files to build the documentation website hosted at https://slideruleearth.io.
platforms
Contains the C++ modules that implement an operating system abstraction layer which enables the framework to run on various platforms.
packages
Contains the C++ modules that implement the primary functions provided by the framework. See package list for a list of available packages. The core package contains the fundamental framework classes and is not dependent on any other package. Other packages should only be dependent on the core package or provide conditional compilation blocks that allow the package to be compiled in the absence of any package outside the core package.
By convention, each package contains two files that are named identical to the package directory name: {package}.cpp, {package}.h. The CMakeLists.txt provides the object modules and any package specific definitions needed to compile the package. It also defines the package's globally defined name used in conditional compilation blocks. The {package}.cpp file provides an initialization function named with the prototype void init{package}(void)
that is used to initialize the package on startup. The {package}.h file exports the initialization function and anything else necessary to use the package.
Any target that includes the package should only include the package's h file, and make a call to the package initialization function.
scripts
Contains Lua and other scripts that can be used for tests and higher level implementations of functionality.
targets
Contains the source files to make the various executable targets. By convention, targets are named as follows: {application}-{platform}.
plugins
Contains a project or mission specific extension to the SlideRule framework that is loaded at run-time. See plugin list for a list of available plugins. Additional plugins may be available from other sources.
In order to build a plugin for SlideRule, the plugin code must compile down to a shared object that exposes a single function defined as void init{plugin}(void)
where {plugin} is the name of the plugin. Note that if developing the plugin in C++ the initialization function must be externed as C in order to prevent the mangling of the exported symbol.
Once the shared object is built, the build system must copy the shared object into the SlideRule plugin directory (specified by the PLUGINDIR
option in the CMakeLists.txt file) with the name {plugin}.so. On startup, the sliderule application scans the configuration directory and loads all plugins present.
VI. Delivering the Code
The three number version identifier X.Y.Z has the following convention: Incrementing X indicates an interface change and does not guarantee the preservation of backward compatibility. Incrementing Y indicates additional or modified functionality that maintains backward compatibility. Incrementing Z indicates a bug fix or code cleanup that does not change the interface or intended behavior of the code.
VII. Licensing
SlideRule is licensed under the 3-clause BSD license found in the LICENSE file at the root of this source tree.
The following SlideRule software components include code sourced from and/or based off of third party software
that is distributed under various open source licenses. The appropriate copyright notices are included in the
corresponding source files.
packages/core/LuaEngine.cpp
: partial code sourced from https://www.lua.org/ (MIT license)scripts/extensions/json.lua
: code sourced from https://github.com/rxi/json.lua.git (MIT license)packages/core/MathLib.cpp
: point inclusion code based off of https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html (BSD-style license)scripts/extensions/base64.lua
: base64 encode/decode code based off of https://github.com/iskolbin/lbase64clients/python/sliderule/icesat2.py
: subsetting code sourced from NSIDC download script (Regents of the University of Colorado)
The following third-party libraries can be linked to by SlideRule:
- Lua: https://www.lua.org/ (MIT license)
- GDAL: https://gdal.org/ (MIT license)
- Arrow: https://arrow.apache.org/ (Apache 2.0 license)
- RapidJSON: https://github.com/Tencent/rapidjson (MIT license)
- curl: https://curl.se/docs/copyright.html (MIT license derivative - see website for license information)
Owner metadata
- Name: SlideRule Earth
- Login: SlideRuleEarth
- Email:
- Kind: organization
- Description: Server and client tools for on-demand processing of science data in the cloud
- Website: https://slideruleearth.io/
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/63428847?v=4
- Repositories: 2
- Last ynced at: 2024-04-26T20:37:21.285Z
- Profile URL: https://github.com/SlideRuleEarth
GitHub Events
Total
- Create event: 45
- Issues event: 16
- Release event: 27
- Watch event: 11
- Delete event: 18
- Issue comment event: 41
- Push event: 264
- Pull request event: 12
Last Year
- Create event: 45
- Issues event: 16
- Release event: 27
- Watch event: 11
- Delete event: 18
- Issue comment event: 41
- Push event: 264
- Pull request event: 12
Committers metadata
Last synced: 9 days ago
Total Commits: 3,735
Total Committers: 14
Avg Commits per committer: 266.786
Development Distribution Score (DDS): 0.197
Commits in past year: 764
Committers in past year: 6
Avg Commits per committer in past year: 127.333
Development Distribution Score (DDS) in past year: 0.246
Name | Commits | |
---|---|---|
JP Swinski | j****i@n****v | 3000 |
Eric Lidwa | e****a@n****v | 612 |
tsutterley | t****l@u****u | 67 |
Carlos E. Ugarte | c****r@g****m | 19 |
Scott Henderson | s****h@u****u | 12 |
David Shean | d****n | 11 |
Fredrik Svensson | e****s@m****o | 4 |
jakegearon | j****n@g****m | 3 |
Alexey Shiklomanov | a****v@g****m | 2 |
Forrest Corcoran | f****7@g****m | 1 |
Joseph H Kennedy | me@j****g | 1 |
Katrina Sharonin | 9****n | 1 |
Pangeo Bot | p****t@g****m | 1 |
Romain Hugonnet | r****t@g****m | 1 |
Committer domains:
- uw.edu: 2
- nasa.gov: 2
- jhkennedy.org: 1
- mis.meta.aero: 1
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 263
Total pull requests: 91
Average time to close issues: 7 months
Average time to close pull requests: 1 day
Total issue authors: 20
Total pull request authors: 6
Average comments per issue: 1.36
Average comments per pull request: 0.47
Merged pull request: 82
Bot issues: 0
Bot pull requests: 0
Past year issues: 38
Past year pull requests: 33
Past year average time to close issues: 20 days
Past year average time to close pull requests: 2 days
Past year issue authors: 11
Past year pull request authors: 5
Past year average comments per issue: 1.5
Past year average comments per pull request: 0.67
Past year merged pull request: 25
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- jpswinski (179)
- SmithB (15)
- elidwa (13)
- dshean (10)
- rhugonnet (10)
- scottyhq (6)
- ejguenther (4)
- kmilo9999 (3)
- cscottwatson (3)
- slhowardESR (3)
- betolink (3)
- ashiklom (3)
- linxiong100 (2)
- jameshgrn (2)
- alma-pi (2)
Top Pull Request Authors
- jpswinski (40)
- elidwa (29)
- cugarteblair (9)
- tsutterley (8)
- rhugonnet (4)
- ksharonin (1)
Top Issue Labels
- documentation (13)
- H5Coro (6)
- python (6)
- ATL06 (6)
- IaC (4)
- pytest (3)
Top Pull Request Labels
Package metadata
- Total packages: 3
-
Total downloads:
- npm: 283 last-month
- pypi: 4,093 last-month
- Total dependent packages: 4 (may contain duplicates)
- Total dependent repositories: 5 (may contain duplicates)
- Total versions: 167
- Total maintainers: 2
pypi.org: sliderule
Python client for interacting with sliderule server
- Homepage: https://github.com/SlideRuleEarth/sliderule/
- Documentation: https://sliderule.readthedocs.io/
- Licenses: BSD 3-Clause
- Latest release: 4.12.3 (published 6 days ago)
- Last Synced: 2025-04-26T11:03:20.637Z (1 day ago)
- Versions: 97
- Dependent Packages: 3
- Dependent Repositories: 3
- Downloads: 4,093 Last month
-
Rankings:
- Dependent packages count: 4.759%
- Dependent repos count: 8.971%
- Average: 9.906%
- Downloads: 10.479%
- Forks count: 11.413%
- Stargazers count: 13.909%
- Maintainers (1)
npmjs.org: @sliderule/sliderule
client for the SlideRule on-demand science data processing service
- Homepage: https://github.com/SlideRuleEarth/sliderule#readme
- Licenses: BSD-3-Clause
- Latest release: 4.12.3 (published 6 days ago)
- Last Synced: 2025-04-26T11:03:22.918Z (1 day ago)
- Versions: 55
- Dependent Packages: 0
- Dependent Repositories: 0
- Downloads: 283 Last month
-
Rankings:
- Forks count: 7.19%
- Stargazers count: 8.831%
- Downloads: 10.258%
- Average: 23.549%
- Dependent repos count: 37.497%
- Dependent packages count: 53.968%
- Maintainers (1)
conda-forge.org: sliderule
Python client to interact with SlideRule, a public web service for processing Earth science data
- Homepage: http://slideruleearth.io/
- Licenses: BSD-3-Clause
- Latest release: 1.4.6 (published over 2 years ago)
- Last Synced: 2025-04-01T02:11:27.048Z (27 days ago)
- Versions: 15
- Dependent Packages: 1
- Dependent Repositories: 2
-
Rankings:
- Dependent repos count: 20.226%
- Dependent packages count: 28.978%
- Average: 39.98%
- Stargazers count: 54.249%
- Forks count: 56.465%
Dependencies
- actions/checkout v3 composite
- github/codeql-action/analyze v2 composite
- github/codeql-action/init v2 composite
- actions/add-to-project v0.4.0 composite
- actions/cache v2 composite
- actions/checkout v3 composite
- conda-incubator/setup-miniconda v2 composite
- actions/checkout v3 composite
- actions/setup-python v4 composite
- actions/checkout v3 composite
- haproxytech/haproxy-ubuntu 2.6 build
- openresty/openresty buster build
- 742127912612.dkr.ecr.us-west-2.amazonaws.com/ilb latest
- 742127912612.dkr.ecr.us-west-2.amazonaws.com/monitor latest
- 742127912612.dkr.ecr.us-west-2.amazonaws.com/proxy latest
- 742127912612.dkr.ecr.us-west-2.amazonaws.com/sliderule latest
- 742127912612.dkr.ecr.us-west-2.amazonaws.com/static-website latest
- ${ILB_IMAGE} latest
- willfarrell/autoheal latest
- ${MONITOR_IMAGE} latest
- ${PROXY_IMAGE} latest
- ${STATIC_WEBSITE_IMAGE} latest
- willfarrell/autoheal latest
- ${SLIDERULE_IMAGE} latest
- willfarrell/autoheal latest
- 279 dependencies
- jest ^29.5.0 development
- netrc ^0.1.4
- fiona *
- geopandas *
- numpy *
- pyarrow *
- requests *
- scikit-learn *
- shapely *
- recommonmark *
- sphinx *
- sphinx_markdown_tables *
- sphinx_rtd_theme *
- jekyll-feed ~> 0.12 development
- jekyll ~> 4.2.0
- jekyll-archives >= 0
- minima ~> 2.5
- minimal-mistakes-jekyll >= 0
- tzinfo ~> 1.2
- tzinfo-data >= 0
- wdm ~> 0.1.1
- webrick >= 0
- addressable 2.8.0
- bundler 2.3.26
- colorator 1.1.0
- concurrent-ruby 1.1.9
- em-websocket 0.5.3
- eventmachine 1.2.7
- faraday 1.4.1
- faraday-excon 1.1.0
- faraday-net_http 1.0.1
- faraday-net_http_persistent 1.1.0
- ffi 1.15.5
- forwardable-extended 2.6.0
- http_parser.rb 0.8.0
- i18n 1.8.11
- jekyll 4.2.1
- jekyll-archives 2.2.1
- jekyll-feed 0.15.1
- jekyll-gist 1.5.0
- jekyll-include-cache 0.2.1
- jekyll-paginate 1.1.0
- jekyll-sass-converter 2.1.0
- jekyll-seo-tag 2.7.1
- jekyll-sitemap 1.4.0
- jekyll-watch 2.2.1
- kramdown 2.3.1
- kramdown-parser-gfm 1.1.0
- liquid 4.0.3
- listen 3.7.1
- mercenary 0.4.0
- minima 2.5.1
- minimal-mistakes-jekyll 4.22.0
- multipart-post 2.1.1
- octokit 4.20.0
- pathutil 0.16.2
- public_suffix 4.0.6
- rb-fsevent 0.11.0
- rb-inotify 0.10.1
- rexml 3.2.5
- rouge 3.27.0
- ruby2_keywords 0.0.4
- safe_yaml 1.0.5
- sassc 2.4.0
- sawyer 0.8.2
- terminal-table 2.0.0
- unicode-display_width 1.8.0
- webrick 1.7.0
- actions/checkout v3 composite
- aws-actions/configure-aws-credentials v2 composite
- docker/setup-buildx-action v3 composite
- actions/checkout v3 composite
- actions/setup-python v4 composite
- pre-commit/action v3.0.0 composite
- boto3 *
- botocore *
- certbot *
- certbot-dns-route53 *
Score: 16.423620932299226