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.3.tar.gz (40.8 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: luxos-0.2.3.tar.gz
  • Upload date:
  • Size: 40.8 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.3.tar.gz
Algorithm Hash digest
SHA256 78f0e9ee5c66d4056cb20e265fd8a3557c3cd3dc5bb55f01917d149a421016ee
MD5 229558a73c272cc4a467c2c41f8d2104
BLAKE2b-256 c51038fb212bf63c47503a1cb5321c12400c576e3f659cecad2bd31141596782

See more details on using hashes here.

File details

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

File metadata

  • Download URL: luxos-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 37.4 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4646ccebc00a52bd1edbc077327fd79d31745fef8252c3cc346f555d9caf5865
MD5 5cc1be3110be368c4dcb00fe3e80e3de
BLAKE2b-256 3d429cee7c062b38c16696a2c4a6c205b2cd5b8a3f7c7031d3b5ba81f8d6fddb

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