1
0
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:
kanoi 2012-07-29 04:16:29 -07:00
commit fe23dfd3d4
3 changed files with 72 additions and 3 deletions

View File

@ -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
View File

@ -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 },

View File

@ -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__ */