Browse Source

Merge commit 'cfd83bb5e98629ccb7d11a36b311b1f03c993bc3' into HEAD

Jenkins 3 years ago
committed by Fabian Vowie
parent
commit
44206a3225
No known key found for this signature in database GPG Key ID: C27317C33B27C410
  1. 238
      README.md
  2. 5
      config/example.json
  3. 16
      lithium.md
  4. 4
      main.go

238
README.md

@ -0,0 +1,238 @@
# Lithium
Micro-service for file storage and processing written in Go.
## Features
- Image processing pipelines for various transformations
- Web API for storing & retrieving files
## Requirements
- [Go 1.17+](https://go.dev/)
- [*Docker*](https://docs.docker.com/) (optional)
## Setup
#### 1. Clone repository
```shell
git clone git@gogs.informatik.hs-fulda.de:FabianVowie/Lithium.git
```
#### 2. Pull dependencies
```shell
go get
```
#### 3. Build & start application
```shell
go run .
```
**Run using [Docker](https://docs.docker.com/) container**
```shell
docker run --rm -p 8000:8000 -v "$PWD":/usr/src/lithium -w /usr/src/lithium golang:1.17 go run .
```
## Testing
```shell
go test ./...
```
### Run tests in verbose logging mode
```shell
go test ./... -v
```
### Run tests in [Docker](https://docs.docker.com/) container
```shell
docker run --rm -v "$PWD":/usr/src/lithium -w /usr/src/lithium golang:1.17 go test ./...
```
## API
### `GET` `/`
Show application information.
**Required headers**:
```shell
Authorization: Bearer <Token>
```
**Example response**:
```json
{
"name": "Lithium",
"version": "0.1.0"
}
```
### `GET` `/{pipeline}`
Show pipeline information.
**Required headers**:
```shell
Authorization: Bearer <Token>
```
**Example response**:
```json
{
"name": "example pipeline",
"slug": "example",
"type": 0,
"remove_metadata": false,
"steps": [
{
"name": "resize image",
"type": 0,
"options": {
"width": 1280,
"height": 720,
"upscale": false
}
}
],
"output": {
"format": 0,
"quality": 90
}
}
```
## Configuration
Config options can be adjusted via the [`settings.json`](settings.json) file in the root directory.
```json
{
"endpoint": "0.0.0.0:8000",
"token": "changeme",
"storage_provider": {
"type": 0,
"base_path": "assets"
}
}
```
## Pipelines
The project uses a pipeline system defined by [JSON](https://en.wikipedia.org/wiki/JSON) files located in the [config](config) folder.
Take a look at the [example pipeline configuration file](config/example.json).
Available pipeline `type`s: `0` (Image), `1` (Video)
```json
{
"name": "example pipeline",
"slug": "example",
"type": 0,
"removeMetadata": false,
"steps": [],
"output": {}
}
```
### Images pipeline
The image pipeline offers the following additional output options.
Available `format` types: `0` (jpeg)
The `quality` field can contain any integer between 1 and 100.
```json
{
"output": {
"format": 0,
"quality": 90
}
}
```
### Available pipeline steps
Each pipeline step consists of an optional `name`, a predefined `type` and configurable `options`.
See the available options below for more information.
```json
{
"name": "step name",
"type": 0,
"options": {}
}
```
#### Resizing images
Resize an image by a given `width` and `height`.
**Step definition**:
```json
{
"type": 0,
"options": {
"width": 1280,
"height": 720
}
}
```
#### Rotating images
Rotate an image with a given `angle` in degrees.
**Step definition**:
```json
{
"type": 1,
"options": {
"angle": 90.0
}
}
```
#### Flipping images
Flip an image with a given direction.
Allowed values for the `direction` option are `"h"` (horizontal), `"v"` (vertical)
**Step definition**:
```json
{
"type": 2,
"options": {
"direction": "h"
}
}
```
#### Grayscale
Convert the colorspace of an image into grayscale.
**Step definition**:
```json
{
"type": 3
}
```
## Authors
- [Fabian Vowie](https://gogs.informatik.hs-fulda.de/FabianVowie)
- [Roman Zipp](https://gogs.informatik.hs-fulda.de/roman.zipp)

5
config/example.json

@ -22,7 +22,10 @@
}, },
{ {
"name": "flip image", "name": "flip image",
"type": 2
"type": 2,
"options": {
"direction": "h"
}
}, },
{ {
"name": "grayscale", "name": "grayscale",

16
lithium.md

@ -1,16 +0,0 @@
# Lithium
Micro-service for file storage and processing.
## Features
- File storing with various providers
- S3 (or S3 compatible like MinIO)
- Locally (for development purposes)
- File processing "pipelines" for various formats
- Compression, Resizing for images
- Encoding for videos
- Remove metadata (e.g. EXIF)
- File-based configuration for pipelines
- JSON/YAML/TOML?
- Web api to store and retrieve files

4
main.go

@ -14,8 +14,8 @@ const Name string = "Lithium"
const Version string = "0.1.0" const Version string = "0.1.0"
type Metadata struct { type Metadata struct {
Name string
Version string
Name string `json:"name"`
Version string `json:"version"`
} }
func PipelineHandler(pipeline pipelines.IPipeline, storageProvider storage.IStorageProvider, w http.ResponseWriter, r *http.Request) { func PipelineHandler(pipeline pipelines.IPipeline, storageProvider storage.IStorageProvider, w http.ResponseWriter, r *http.Request) {

Loading…
Cancel
Save