Skip to main content

The all encompassing LuxOS python library.

Project description

LuxOS Tools Repository

PyPI version Python versions License - MIT Build PyPI - Downloads Mypy Ruff

This package contains a python package luxos and scripts to operate miners running LuxOS. See the full documentation here.

Install

To install the latest version:

   $> pip install -U luxos

Check the version:

python -c "import luxos; print(luxos.__version__, luxos.__hash__)"
# 0.0.5 08cc733ce8aedf406856c8ad9ccbe44e78917a37

Scripting

The luxos package comes with some helper scripts, to ease everyday miners' maintenance.

luxos (cli)

This will launch the version command on a miner, returning the json output:

luxos --range 127.0.0.1 --quiet --json --cmd version 

The --range flag can tak as argument:

  • a single ip address --range 127.0.0.1
  • a range like --range 127.0.0.1-127.0.0.5
  • or addresses from a file --range @miners.csv.

Other examples:

# set/unset ATM
luxos --range 127.0.0.1 --quiet --json --cmd atmset --params "enabled=true"

# add a new profile
luxos --range 127.0.0.1 --quiet --json --cmd profilenew --params "myprofile,700,14.8"

luxos-run (cli)

The luxos-run allow to "run" a scriptlet on miners.

A scriptlet is a a python file such as my-script.py looking like this:

from luxos import asyncops
async def main(host: str, port: int):
    res = await asyncops.rexec(host, port, "version")
    return asyncops.validate(host, port, res, "VERSION")[0]

The main entry point is an async function, taking host, ip parameter: they can execute more complex operations on a set of miners specified with the --range flag, in the same way the luxos cli script does.

This will run my-script.py and report the results in json:

luxos-run --range 127.0.0.1 my-script.py

API

luxos provides an easy-to-use API to write complex scripts on miners.

It comes in two different flavours, a sync version for legacy non high performance operations, and an async version allowing operation on a fleet of miners: the API of the main functions is essentially keep identical.

Main functions

The whole of the "kernel" API is rather small-ish and it is based essentially on few functions:

  • luxos.utils.load_ips_from_csv - utility to load miners addresses from a CSV file
  • luxos.utils.rexec - an async function to launch commands on a miner
  • luxos.utils.execute_command - the same as rexec but syncronous
  • luxos.utils.validate - validate a message from a miner
  • luxos.utils.launch - run a command on multiple miners

Full documentation.

Get a miner's version (example)

Get a miner's version data (async version):

import asyncio
from luxos.utils import rexec, validate

async def get_version(host: str, port: int) -> dict:
    res = await rexec(host, port, "version")
    return validate(res, "VERSION", 1, 1)

if __name__ == "__main__":
    print(asyncio.run(get_version("127.0.0.1", 4028)))

There's a syncronous version (better for one-liners), with identical calling conventions:

from luxos.utils import execute_command, validate, load_ips_from_csv

if __name__ == "__main__":
    print(validate(execute_command(
        "127.0.0.1", 4028, 3, "version"), "VERSION", 1, 1))

Run commands (example)

The luxos.utils.launch is an async function to launch a command on a set of miners using asyncio.

This is a simple example (see Full documentation) for more.

import asyncio
from luxos.utils import validate, load_ips_from_csv, rexec, launch

async def get_version(host: str, port: int) -> dict:
    res = await rexec(host, port, "version")
    return validate(res, "VERSION", 1, 1)

if __name__ == "__main__":
    addresses = load_ips_from_csv("miners.csv")
    print(asyncio.run(launch(addresses, get_version)))

LuxOS HealthChecker - health_checker.py

The HealthChecker script is designed to continuously pull miner data from LuxOS, providing valuable insights into the health of your mining machines.

You can customize the HealthChecker params using the config.yaml file provided. To run the HealthChecker you can use health-checker if you installed using pip, or the cli python3 -m luxos.scripts.health_checker.


Feel free to explore and customize these tools to suit your specific needs. If you encounter any issues or have suggestions for improvement, please open an issue or submit a pull request.

You can find LuxOS API documentation here.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

luxos-0.2.3b46.tar.gz (40.9 kB view details)

Uploaded Source

Built Distribution

luxos-0.2.3b46-py3-none-any.whl (37.5 kB view details)

Uploaded Python 3

File details

Details for the file luxos-0.2.3b46.tar.gz.

File metadata

  • Download URL: luxos-0.2.3b46.tar.gz
  • Upload date:
  • Size: 40.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for luxos-0.2.3b46.tar.gz
Algorithm Hash digest
SHA256 40aee69b9e93b8605e7d401139aea69172dd27d432375a9cfa18543883938574
MD5 c9dacd664a7de15fba14371696ff9c08
BLAKE2b-256 897c0795a52a55d13c2c67bb0ed5f7f7a3de08b94d325fcfd40de542bc9f7c99

See more details on using hashes here.

File details

Details for the file luxos-0.2.3b46-py3-none-any.whl.

File metadata

  • Download URL: luxos-0.2.3b46-py3-none-any.whl
  • Upload date:
  • Size: 37.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for luxos-0.2.3b46-py3-none-any.whl
Algorithm Hash digest
SHA256 a516d02f6dde44804fee7a3ae27104980c12d8d0ef46645618d59f90a35ecb83
MD5 b71c060734132c70a40afea5b763d6aa
BLAKE2b-256 45a9149429a0f753374e7361cce0ae58d69169665bcca3273d6f4c8a4aeeb389

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page