piaas

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 3, 2019 License: GPL-3.0 Imports: 16 Imported by: 0

README

The Personal IAAS

Piaas is a set of tools that help you develop using multiple machines. You can use your favorite IDE locally, while compile and serve on a more powerful desktop PC remotely.

We all work on laptop today. However, compiling and serving on laptop is crazy. The fan keeps working and creating quite a noise. Your battery drained, cycle count increased. More than ever, peace of mind you lost.

Piaas help your workspace in sync with a remote machine, given it a more powerful desktop PC, a high end iMac or a shared server. Develop with your favorite IDE, while compiling and serving from the desktop. Your laptop is relaxed to do the thing that absolutely required it to do. Great team work, isn't it ?

Installation

Download the binary from the github release page:

  • Windows, 64 bit
  • Mac OS, 64 bit
  • Linux, 64 bit

Extract and place the binary in your path and you're done.

System requirements

The application support Mac OS, but was only tested on Mojave.

Linux should be fine, but untested.

On windows platform, WSL (windows subsystem linux) is required. At the moment Windows 10 is the only version with WSL so is the only version supported.

If you need instructions on how to enable WSL on windows, check this.

Commands

  • sync, Keep your local workspace in sync with a remote directory
  • app, Run your application in the background and monitor the logs

Documentation

Index

Constants

This section is empty.

Variables

View Source
var LogfileName = "output.log"
View Source
var PidfileName = "pid"

Functions

func HandleDebug

func HandleDebug(c *cli.Context) error

Turn on debug logging if -debug was specified

func HandleExitSignal added in v0.1.0

func HandleExitSignal()

func PrepareCommonFlags added in v0.1.0

func PrepareCommonFlags() []cli.Flag

Prepare common flags for commands.

func SubscribeExitSignal added in v0.1.0

func SubscribeExitSignal(obs func(os.Signal), preferredFront bool)

Add observer to listen to exit signal. Set preferredFront to true to make sure the observer is ranked in front.

Types

type App

type App struct {
	Name   string
	Cmd    string
	Params []string
}

type Config

type Config struct {
	ApiVersion string
	Executable
	Profiles []Profile
	Apps     []App
}

func ReadConfig

func ReadConfig(file string) Config

func (*Config) GetApp added in v0.1.0

func (conf *Config) GetApp(name string) (App, error)

Get app by name. Returned the only app, if name is empty string.

Return error, if the app of the name can not be found. Or name is empty string but there're more than one app.

func (*Config) GetProfile

func (conf *Config) GetProfile(name string) (Profile, error)

func (*Config) GetSyncTarget

func (conf *Config) GetSyncTarget(name string) (string, error)

Find matching profile and use the information to compose the rsync target string. In this format: ${user}@${host}:${target}

type Event

type Event struct {
	Path string
}

type Executable

type Executable struct {
	Cmd    string
	Params []string
}

type Monitor

type Monitor interface {
	// Start watching for file system changes. Specify the debounceTime so the events are collected within the debounce time.
	Start(debounceTime uint64)
	// Register a observer to receive the fs events
	Subscribe(observer chan<- []string)
	// Stop file system watching.
	Stop()
}

func NewMonitor

func NewMonitor(startDir string) Monitor

type MonitorPath

type MonitorPath struct {
	// contains filtered or unexported fields
}

type Profile

type Profile struct {
	// profile name
	Name string
	// The connection information used by sync module
	Connection SyncConnection
	// The name of ignore file, default to .piaasignore
	IgnoreFile string
}

Profile controls how the project can sync to remote machine.

type RecursiveMonitor

type RecursiveMonitor struct {
	// contains filtered or unexported fields
}

func NewRecursiveMonitor

func NewRecursiveMonitor(start string) RecursiveMonitor

Traverse the tree and create monitor for all directory

func (*RecursiveMonitor) Start

func (rm *RecursiveMonitor) Start(debounceTime uint64)

Start watching on all registered monitors, and manage the removal and addition of new directories.

func (*RecursiveMonitor) Stop

func (rm *RecursiveMonitor) Stop()

func (*RecursiveMonitor) Subscribe

func (rm *RecursiveMonitor) Subscribe(subscriber chan<- []string)

func (*RecursiveMonitor) SubscribeToChanges

func (rm *RecursiveMonitor) SubscribeToChanges(subscriber chan<- string)

type RsyncPattern

type RsyncPattern struct {
	// contains filtered or unexported fields
}

Implement basic rsync filter rules.

Support the below notation

- Exact, path element without special character. Ex: foo - Anchored, path start with `/`. Ex: /foo - Wildcard, path element that matches any character. Ex: foo* - Double wildcards, path elements that matches any character including sub directories. Ex: foo/** - Multi segments, path elements that span over one level in the hierarchy. Ex: foo/bar

func NewRsyncPattern

func NewRsyncPattern(pat string) RsyncPattern

Create a new RsyncPattern.

func (RsyncPattern) Match

func (rp RsyncPattern) Match(path string) bool

Match a given path to make sure it matches this pattern or not. You should not directly

func (RsyncPattern) ToString

func (rp RsyncPattern) ToString() string

type RsyncPatterns

type RsyncPatterns struct {
	// contains filtered or unexported fields
}

func NewRsyncPatterns

func NewRsyncPatterns(basedir string, patterns ...RsyncPattern) RsyncPatterns

Create a new RsyncPatterns.

func (*RsyncPatterns) Match

func (rp *RsyncPatterns) Match(path string) bool

Working on a path under the basedir to see if it matches with any of the registered patterns. False is returned if path wasn't under basedir.

func (*RsyncPatterns) MatchRelative added in v0.0.4

func (rp *RsyncPatterns) MatchRelative(rel string) bool

Working on a path relative to the basedir.

type RsyncWrapper

type RsyncWrapper struct {
	// The rsync command to execute, usually just 'rsync' on Mac and Linux.
	// But may involves batch file on windows.
	Executable
	// contains filtered or unexported fields
}

func NewRsyncWrapper

func NewRsyncWrapper(rsyncCmd Executable, basedir string, target string) RsyncWrapper

Create a RsyncWrapper using `cmd` as the command, running on `basedir`, syncing to `target`. The RsyncWrapper will also be configured to use ssh options 'ConnectTimeout=10'

func (*RsyncWrapper) SetIgnoreFile

func (rs *RsyncWrapper) SetIgnoreFile(ignore string)

func (*RsyncWrapper) SetSshOptions

func (rs *RsyncWrapper) SetSshOptions(options string)

func (*RsyncWrapper) Start

func (rs *RsyncWrapper) Start(process func(cmd *exec.Cmd))

Open the channel to start working on sync events

When cmd is received, `process` will be invoked to actually running the command.

func (*RsyncWrapper) SyncAll

func (rs *RsyncWrapper) SyncAll()

Sync all files to remote.

func (*RsyncWrapper) SyncFiles

func (rs *RsyncWrapper) SyncFiles(files []string)

Sync only the specified files If the files list is empty, do nothing

type RunDir added in v0.1.0

type RunDir string

RunDir is the directory where application log and pid file are kept. Usually .piaas.d

func NewRunDir added in v0.1.0

func NewRunDir(dir string) RunDir

func (RunDir) Logfile added in v0.1.0

func (dir RunDir) Logfile(app string) string

func (RunDir) Pidfile added in v0.1.0

func (dir RunDir) Pidfile(app string) string

type SyncConnection

type SyncConnection struct {
	Host        string
	User        string
	Destination string
}

The sync connection target

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL