mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-22 20:44:19 +00:00
commit
17ec5f2692
30
API-README
30
API-README
@ -39,7 +39,7 @@ To give an IP address/subnet access to a group you use the group letter
|
||||
in front of the IP address instead of W: e.g. P:192.168.0/32
|
||||
An IP address/subnet can only be a member of one group
|
||||
A sample API group would be:
|
||||
--api-groups P:switchpool:enablepool:addpool:disablepool:removepool:*
|
||||
--api-groups P:switchpool:enablepool:addpool:disablepool:removepool.poolpriority:*
|
||||
This would create a group 'P' that can do all current pool commands and all
|
||||
non-priviliged commands - the '*' means all non-priviledged commands
|
||||
Without the '*' the group would only have access to the pool commands
|
||||
@ -174,6 +174,11 @@ The list of requests - a (*) means it requires privileged access - and replies a
|
||||
Use '\\' to get a '\' and '\,' to include a comma
|
||||
inside URL, USR or PASS
|
||||
|
||||
poolpriority|N,... (*)
|
||||
none There is no reply section just the STATUS section
|
||||
stating the results of changing pool priorities
|
||||
See usage below
|
||||
|
||||
disablepool|N (*)
|
||||
none There is no reply section just the STATUS section
|
||||
stating the results of disabling pool N
|
||||
@ -270,8 +275,18 @@ The list of requests - a (*) means it requires privileged access - and replies a
|
||||
When you enable, disable or restart a GPU or PGA, you will also get Thread messages
|
||||
in the cgminer status window
|
||||
|
||||
When you switch to a different pool to the current one, you will get a
|
||||
'Switching to URL' message in the cgminer status windows
|
||||
The 'poolpriority' command can be used to reset the priority order of multiple
|
||||
pools with a single command - 'switchpool' only sets a single pool to first priority
|
||||
Each pool should be listed by id number in order of preference (first = most
|
||||
preferred)
|
||||
Any pools not listed will be prioritised after the ones that are listed, in the
|
||||
priority order they were originally
|
||||
If the priority change affects the miner's preference for mining, it may switch
|
||||
immediately
|
||||
|
||||
When you switch to a different pool to the current one (including by priority
|
||||
change), you will get a 'Switching to URL' message in the cgminer status
|
||||
windows
|
||||
|
||||
Obviously, the JSON format is simply just the names as given before the '='
|
||||
with the values after the '='
|
||||
@ -309,7 +324,14 @@ miner.php - an example web page to access the API
|
||||
Feature Changelog for external applications using the API:
|
||||
|
||||
|
||||
API V1.14
|
||||
API V1.15
|
||||
|
||||
Added API commands:
|
||||
'poolpriority'
|
||||
|
||||
----------
|
||||
|
||||
API V1.14 (cgminer v2.5.0)
|
||||
|
||||
Modified API commands:
|
||||
'stats' - more icarus timing stats added
|
||||
|
77
api.c
77
api.c
@ -166,7 +166,7 @@ static const char SEPARATOR = '|';
|
||||
#define SEPSTR "|"
|
||||
static const char GPUSEP = ',';
|
||||
|
||||
static const char *APIVERSION = "1.14";
|
||||
static const char *APIVERSION = "1.15";
|
||||
static const char *DEAD = "Dead";
|
||||
static const char *SICK = "Sick";
|
||||
static const char *NOSTART = "NoStart";
|
||||
@ -372,6 +372,8 @@ static const char *JSON_PARAMETER = "parameter";
|
||||
#define MSG_MINESTATS 70
|
||||
#define MSG_MISCHK 71
|
||||
#define MSG_CHECK 72
|
||||
#define MSG_POOLPRIO 73
|
||||
#define MSG_DUPPID 74
|
||||
|
||||
enum code_severity {
|
||||
SEVERITY_ERR,
|
||||
@ -385,6 +387,7 @@ enum code_parameters {
|
||||
PARAM_GPU,
|
||||
PARAM_PGA,
|
||||
PARAM_CPU,
|
||||
PARAM_PID,
|
||||
PARAM_GPUMAX,
|
||||
PARAM_PGAMAX,
|
||||
PARAM_CPUMAX,
|
||||
@ -501,6 +504,8 @@ struct CODES {
|
||||
{ SEVERITY_ERR, MSG_ACCDENY, PARAM_STR, "Access denied to '%s' command" },
|
||||
{ SEVERITY_SUCC, MSG_ACCOK, PARAM_NONE, "Privileged access OK" },
|
||||
{ SEVERITY_SUCC, MSG_ENAPOOL, PARAM_POOL, "Enabling pool %d:'%s'" },
|
||||
{ SEVERITY_SUCC, MSG_POOLPRIO,PARAM_NONE, "Changed pool priorities" },
|
||||
{ SEVERITY_ERR, MSG_DUPPID, PARAM_PID, "Duplicate pool specified %d" },
|
||||
{ SEVERITY_SUCC, MSG_DISPOOL, PARAM_POOL, "Disabling pool %d:'%s'" },
|
||||
{ SEVERITY_INFO, MSG_ALRENAP, PARAM_POOL, "Pool %d:'%s' already enabled" },
|
||||
{ SEVERITY_INFO, MSG_ALRDISP, PARAM_POOL, "Pool %d:'%s' already disabled" },
|
||||
@ -1062,6 +1067,7 @@ static char *message(int messageid, int paramid, char *param2, bool isjson)
|
||||
case PARAM_GPU:
|
||||
case PARAM_PGA:
|
||||
case PARAM_CPU:
|
||||
case PARAM_PID:
|
||||
sprintf(buf, codes[i].description, paramid);
|
||||
break;
|
||||
case PARAM_POOL:
|
||||
@ -2128,6 +2134,74 @@ static void enablepool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __
|
||||
strcpy(io_buffer, message(MSG_ENAPOOL, id, NULL, isjson));
|
||||
}
|
||||
|
||||
static void poolpriority(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group)
|
||||
{
|
||||
char *ptr, *next;
|
||||
int i, pr, prio = 0;
|
||||
|
||||
// TODO: all cgminer code needs a mutex added everywhere for change
|
||||
// access to total_pools and also parts of the pools[] array,
|
||||
// just copying total_pools here wont solve that
|
||||
|
||||
if (total_pools == 0) {
|
||||
strcpy(io_buffer, message(MSG_NOPOOL, 0, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
if (param == NULL || *param == '\0') {
|
||||
strcpy(io_buffer, message(MSG_MISPID, 0, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
bool pools_changed[total_pools];
|
||||
int new_prio[total_pools];
|
||||
for (i = 0; i < total_pools; ++i)
|
||||
pools_changed[i] = false;
|
||||
|
||||
next = param;
|
||||
while (next && *next) {
|
||||
ptr = next;
|
||||
next = strchr(ptr, ',');
|
||||
if (next)
|
||||
*(next++) = '\0';
|
||||
|
||||
i = atoi(ptr);
|
||||
if (i < 0 || i >= total_pools) {
|
||||
strcpy(io_buffer, message(MSG_INVPID, i, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
if (pools_changed[i]) {
|
||||
strcpy(io_buffer, message(MSG_DUPPID, i, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
pools_changed[i] = true;
|
||||
new_prio[i] = prio++;
|
||||
}
|
||||
|
||||
// Only change them if no errors
|
||||
for (i = 0; i < total_pools; i++) {
|
||||
if (pools_changed[i])
|
||||
pools[i]->prio = new_prio[i];
|
||||
}
|
||||
|
||||
// In priority order, cycle through the unchanged pools and append them
|
||||
for (pr = 0; pr < total_pools; pr++)
|
||||
for (i = 0; i < total_pools; i++) {
|
||||
if (!pools_changed[i] && pools[i]->prio == pr) {
|
||||
pools[i]->prio = prio++;
|
||||
pools_changed[i] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (current_pool()->prio)
|
||||
switch_pools(NULL);
|
||||
|
||||
strcpy(io_buffer, message(MSG_POOLPRIO, 0, NULL, isjson));
|
||||
}
|
||||
|
||||
static void disablepool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group)
|
||||
{
|
||||
struct pool *pool;
|
||||
@ -2659,6 +2733,7 @@ struct CMDS {
|
||||
{ "cpucount", cpucount, false },
|
||||
{ "switchpool", switchpool, true },
|
||||
{ "addpool", addpool, true },
|
||||
{ "poolpriority", poolpriority, true },
|
||||
{ "enablepool", enablepool, true },
|
||||
{ "disablepool", disablepool, true },
|
||||
{ "removepool", removepool, true },
|
||||
|
Loading…
x
Reference in New Issue
Block a user