mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-11 15:27:53 +00:00
Merge pull request #2 from luke-jr/rpc_poolpriority
RPC: New "poolpriority" command to set the order of pool priorities
This commit is contained in:
commit
fe23dfd3d4
16
API-README
16
API-README
@ -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
|
Use '\\' to get a '\' and '\,' to include a comma
|
||||||
inside URL, USR or PASS
|
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 (*)
|
disablepool|N (*)
|
||||||
none There is no reply section just the STATUS section
|
none There is no reply section just the STATUS section
|
||||||
stating the results of disabling pool N
|
stating the results of disabling pool N
|
||||||
@ -270,8 +275,15 @@ 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
|
When you enable, disable or restart a GPU or PGA, you will also get Thread messages
|
||||||
in the cgminer status window
|
in the cgminer status window
|
||||||
|
|
||||||
When you switch to a different pool to the current one, you will get a
|
The 'poolpriority' command can be used to reset the priority order of pools.
|
||||||
'Switching to URL' message in the cgminer status windows
|
Each pool should be listed by id number in order of preference (first = most
|
||||||
|
preferred). Any pools not listed will be prioritized after the ones that are,
|
||||||
|
in an undefined order. 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 '='
|
Obviously, the JSON format is simply just the names as given before the '='
|
||||||
with the values after the '='
|
with the values after the '='
|
||||||
|
48
api.c
48
api.c
@ -339,6 +339,7 @@ static const char *JSON_PARAMETER = "parameter";
|
|||||||
#define MSG_ACCDENY 45
|
#define MSG_ACCDENY 45
|
||||||
#define MSG_ACCOK 46
|
#define MSG_ACCOK 46
|
||||||
#define MSG_ENAPOOL 47
|
#define MSG_ENAPOOL 47
|
||||||
|
#define MSG_POOLPRIO 73
|
||||||
#define MSG_DISPOOL 48
|
#define MSG_DISPOOL 48
|
||||||
#define MSG_ALRENAP 49
|
#define MSG_ALRENAP 49
|
||||||
#define MSG_ALRDISP 50
|
#define MSG_ALRDISP 50
|
||||||
@ -501,6 +502,7 @@ struct CODES {
|
|||||||
{ SEVERITY_ERR, MSG_ACCDENY, PARAM_STR, "Access denied to '%s' command" },
|
{ SEVERITY_ERR, MSG_ACCDENY, PARAM_STR, "Access denied to '%s' command" },
|
||||||
{ SEVERITY_SUCC, MSG_ACCOK, PARAM_NONE, "Privileged access OK" },
|
{ SEVERITY_SUCC, MSG_ACCOK, PARAM_NONE, "Privileged access OK" },
|
||||||
{ SEVERITY_SUCC, MSG_ENAPOOL, PARAM_POOL, "Enabling pool %d:'%s'" },
|
{ SEVERITY_SUCC, MSG_ENAPOOL, PARAM_POOL, "Enabling pool %d:'%s'" },
|
||||||
|
{ SEVERITY_SUCC, MSG_POOLPRIO,PARAM_NONE, "Changed pool priorities" },
|
||||||
{ SEVERITY_SUCC, MSG_DISPOOL, PARAM_POOL, "Disabling pool %d:'%s'" },
|
{ SEVERITY_SUCC, MSG_DISPOOL, PARAM_POOL, "Disabling pool %d:'%s'" },
|
||||||
{ SEVERITY_INFO, MSG_ALRENAP, PARAM_POOL, "Pool %d:'%s' already enabled" },
|
{ SEVERITY_INFO, MSG_ALRENAP, PARAM_POOL, "Pool %d:'%s' already enabled" },
|
||||||
{ SEVERITY_INFO, MSG_ALRDISP, PARAM_POOL, "Pool %d:'%s' already disabled" },
|
{ SEVERITY_INFO, MSG_ALRDISP, PARAM_POOL, "Pool %d:'%s' already disabled" },
|
||||||
@ -2128,6 +2130,51 @@ static void enablepool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __
|
|||||||
strcpy(io_buffer, message(MSG_ENAPOOL, id, NULL, 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)
|
||||||
|
{
|
||||||
|
SETUP_STRTOK_TS;
|
||||||
|
int total_pools_ = total_pools; // Keep a local copy, to be more threadsafe
|
||||||
|
char *a;
|
||||||
|
int i, prio = 0, e = -1;
|
||||||
|
|
||||||
|
if (total_pools_ == 0) {
|
||||||
|
strcpy(io_buffer, message(MSG_NOPOOL, 0, NULL, isjson));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool pools_changed[total_pools_];
|
||||||
|
for (i = 0; i < total_pools_; ++i)
|
||||||
|
pools_changed[i] = false;
|
||||||
|
|
||||||
|
a = strtok_ts(param, ",");
|
||||||
|
do {
|
||||||
|
i = strtol(a, &a, 10);
|
||||||
|
if (unlikely(*a > 0x20 || i < 0 || i >= total_pools)) {
|
||||||
|
e = (*a > 0x20) ? -2 : i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pools[i]->prio = prio++;
|
||||||
|
pools_changed[i] = true;
|
||||||
|
} while ( (a = strtok_ts(NULL, ",")) );
|
||||||
|
|
||||||
|
for (i = 0; i < total_pools_; ++i)
|
||||||
|
if (!pools_changed[i])
|
||||||
|
pools[i]->prio = prio++;
|
||||||
|
|
||||||
|
if (current_pool()->prio)
|
||||||
|
switch_pools(NULL);
|
||||||
|
|
||||||
|
if (e != -1) {
|
||||||
|
if (e == -2)
|
||||||
|
strcpy(io_buffer, message(MSG_MISPID, 0, NULL, isjson));
|
||||||
|
else
|
||||||
|
strcpy(io_buffer, message(MSG_INVPID, e, NULL, isjson));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(io_buffer, message(MSG_POOLPRIO, 0, NULL, isjson));
|
||||||
|
}
|
||||||
|
|
||||||
static void disablepool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group)
|
static void disablepool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group)
|
||||||
{
|
{
|
||||||
struct pool *pool;
|
struct pool *pool;
|
||||||
@ -2659,6 +2706,7 @@ struct CMDS {
|
|||||||
{ "cpucount", cpucount, false },
|
{ "cpucount", cpucount, false },
|
||||||
{ "switchpool", switchpool, true },
|
{ "switchpool", switchpool, true },
|
||||||
{ "addpool", addpool, true },
|
{ "addpool", addpool, true },
|
||||||
|
{ "poolpriority", poolpriority, true },
|
||||||
{ "enablepool", enablepool, true },
|
{ "enablepool", enablepool, true },
|
||||||
{ "disablepool", disablepool, true },
|
{ "disablepool", disablepool, true },
|
||||||
{ "removepool", removepool, true },
|
{ "removepool", removepool, true },
|
||||||
|
11
compat.h
11
compat.h
@ -9,6 +9,10 @@
|
|||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
// NOTE: Windows strtok uses a thread-local static buffer, so this is safe
|
||||||
|
#define SETUP_STRTOK_TS /*nothing needed*/
|
||||||
|
#define strtok_ts strtok
|
||||||
|
|
||||||
#include "miner.h" // for timersub
|
#include "miner.h" // for timersub
|
||||||
|
|
||||||
static inline int nanosleep(const struct timespec *req, struct timespec *rem)
|
static inline int nanosleep(const struct timespec *req, struct timespec *rem)
|
||||||
@ -72,8 +76,13 @@ typedef long suseconds_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PTH(thr) ((thr)->pth.p)
|
#define PTH(thr) ((thr)->pth.p)
|
||||||
#else
|
#else /* ! WIN32 */
|
||||||
|
|
||||||
#define PTH(thr) ((thr)->pth)
|
#define PTH(thr) ((thr)->pth)
|
||||||
|
|
||||||
|
#define SETUP_STRTOK_TS char*_strtok_ts_saveptr
|
||||||
|
#define strtok_ts(str, delim) strtok_r(str, delim, &_strtok_ts_saveptr)
|
||||||
|
|
||||||
#endif /* WIN32 */
|
#endif /* WIN32 */
|
||||||
|
|
||||||
#endif /* __COMPAT_H__ */
|
#endif /* __COMPAT_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user