| All Verbs | /qry/rounds/draw/diagnostics |
|---|
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Initialization:
data_load_duration: int = 0
bets_collections_creation_duration: int = 0
combinations_occurance_lookup_initialization_duration: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SequenceGeneration:
nr_of_threads: int = 0
nr_of_results_probed: int = 0
duration: int = 0
avg_single_pass_duration: int = 0
class SortingOrder(IntEnum):
NONE = 0
ASCENDING = 1
DESCENDING = 2
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BestFitFinder:
target_amount: Decimal = decimal.Decimal(0)
awarded_amount: Decimal = decimal.Decimal(0)
deviation: Decimal = decimal.Decimal(0)
deviation_pct: Decimal = decimal.Decimal(0)
sequence_result_type: Optional[str] = None
is_jack_pot5_drawn: bool = False
filtering_period: int = 0
win_count_order: Optional[SortingOrder] = None
min_amount: Decimal = decimal.Decimal(0)
max_amount: Decimal = decimal.Decimal(0)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Bet:
is_found: bool = False
bet_id: Optional[str] = None
slip_id: Optional[str] = None
comb_stake: Optional[Object] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QualifiedPool:
id: int = 0
name: Optional[str] = None
coefficient: Decimal = decimal.Decimal(0)
available_amount: Decimal = decimal.Decimal(0)
awarded_amount: Decimal = decimal.Decimal(0)
target_bet: Optional[Bet] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Purger:
prevalent_stake: Decimal = decimal.Decimal(0)
pool_purger: Optional[str] = None
qualified_pools: Optional[List[QualifiedPool]] = None
class ResponseStatus(IntEnum):
FAILURE = 0
SUCCESS = 1
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StimulationResponse:
stimulation_id: Optional[str] = None
status: Optional[ResponseStatus] = None
failure_reason: Optional[str] = None
slip_id: Optional[str] = None
bet_id: Optional[str] = None
amount_awarded: Decimal = decimal.Decimal(0)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CurrentRoundInfo:
round_id: Optional[str] = None
amount: Decimal = decimal.Decimal(0)
inert_code: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BettingApp:
name: Optional[str] = None
version: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Ref:
id: Optional[str] = None
val: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RefEx(Ref):
data: Optional[RecordDictionary[str, str]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Origin:
application: Optional[BettingApp] = None
ip: Optional[str] = None
organization: Optional[RefEx] = None
region: Optional[Ref] = None
location_group: Optional[Ref] = None
location: Optional[RefEx] = None
device: Optional[RefEx] = None
clerk: Optional[Ref] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WinnerByCode:
round_id: Optional[str] = None
drawn_at_utc: datetime.datetime = datetime.datetime(1, 1, 1)
slip_id: Optional[str] = None
bet_id: Optional[str] = None
code: Optional[str] = None
amount: Decimal = decimal.Decimal(0)
origin: Optional[Origin] = None
bettor: Optional[Ref] = None
location_address_or_bettor_info: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LocalCodePotInfo:
is_active: bool = False
current: Optional[CurrentRoundInfo] = None
winners: Optional[List[WinnerByCode]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SuperWinInfo:
duration_in_ms: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HappyHourInfo:
is_happy_hour: bool = False
odds_modifier: Decimal = decimal.Decimal(0)
round_pool_bonus_pct: Decimal = decimal.Decimal(0)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AccumulatorConfiguration(AccumulatorConfiguration):
id: Optional[str] = None
updated_at: datetime.datetime = datetime.datetime(1, 1, 1)
class SyphonType(IntEnum):
LOCATION = 0
BETTOR = 1
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Syphon:
id: Optional[str] = None
name: Optional[str] = None
type: Optional[SyphonType] = None
nr_of_combinations: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SyphonInfo:
bettors: Optional[Dict[str, Syphon]] = None
locations: Optional[Dict[str, Syphon]] = None
has_syphons: bool = False
total_syphons_in_round: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DrawDiagnostics:
id: Optional[str] = None
initialization_info: Optional[Initialization] = None
sequence_generation_info: Optional[SequenceGeneration] = None
best_fit_finder_info: Optional[BestFitFinder] = None
purger_info: Optional[Purger] = None
duration: int = 0
stimulation_responses: Optional[List[StimulationResponse]] = None
local_code_pot: Optional[LocalCodePotInfo] = None
super_win: Optional[SuperWinInfo] = None
happy_hour: Optional[HappyHourInfo] = None
reasoning: Optional[str] = None
configuration: Optional[AccumulatorConfiguration] = None
syphon_info: Optional[SyphonInfo] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GetDrawDignostics:
id: Optional[str] = None
TKey = TypeVar('TKey')
TVal = TypeVar('TVal')
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RecordDictionary(Generic[TKey, TVal], Dict[TKey,TVal]):
pass
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /qry/rounds/draw/diagnostics HTTP/1.1
Host: s4w2.api.bettor.cc
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
id: String
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
id: String,
initializationInfo:
{
dataLoadDuration: 0,
betsCollectionsCreationDuration: 0,
combinationsOccuranceLookupInitializationDuration: 0
},
sequenceGenerationInfo:
{
nrOfThreads: 0,
nrOfResultsProbed: 0,
duration: 0,
avgSinglePassDuration: 0
},
bestFitFinderInfo:
{
targetAmount: 0,
awardedAmount: 0,
deviation: 0,
deviationPct: 0,
sequenceResultType: String,
isJackPot5Drawn: False,
filteringPeriod: 0,
winCountOrder: 0,
minAmount: 0,
maxAmount: 0
},
purgerInfo:
{
prevalentStake: 0,
poolPurger: String,
qualifiedPools:
[
{
id: 0,
name: String,
coefficient: 0,
availableAmount: 0,
awardedAmount: 0,
targetBet:
{
isFound: False,
betId: String,
slipId: String,
combStake: {}
}
}
]
},
duration: 0,
stimulationResponses:
[
{
stimulationId: String,
status: 0,
failureReason: String,
slipId: String,
betId: String,
amountAwarded: 0
}
],
localCodePot:
{
durationInMs: 0
},
superWin:
{
durationInMs: 0
},
happyHour:
{
isHappyHour: False,
oddsModifier: 0,
roundPoolBonusPct: 0
},
reasoning: String,
configuration:
{
pools:
[
{
id: 0,
name: String,
rtp: 0,
reserveRTP: 0,
totalRTP: 0
}
],
prevalentStake: 0,
purgeThresholdModifier: 0,
locationOptimizationLevel: 0,
jackPot5ThresholdInterval:
{
start: 0,
end: 0
},
deviationCategorySpanInPct: 0,
deviationCategoryThresholdAmount: 0,
roundPoolCircuitBreakerThreshold: 0,
lowWinCountAffinityInPct: 0,
winCountOrderAffinity:
[
{
order: 0,
probability: 0
}
],
highRollerSettings:
{
pools:
[
{
id: 0,
name: String,
isActive: False,
contributionToRoundPoolPct: 0,
caps:
{
plusCoef: 0,
minusCoef: 0,
maxAmountInPrevalentStakes: 0
}
}
],
categoryThresholds:
[
{
category: 0,
threshold: 0
}
]
},
overflowCoefficientPoolsToRound: False,
antiSyphonProtectionOverride: False,
fraudDetectionConfig:
{
antiSyphon:
{
combinationCountPerRoundThresholdPct: 0,
excludedLocations:
[
{
id: String,
val: String
}
],
includeRoundPctAsBettorSyphonCriteria: False,
isActive: False
}
},
debugConfig:
{
logLocationStats: False,
logBettorSats: False
}
},
syphonInfo:
{
bettors:
{
String:
{
id: String,
name: String,
type: 0,
nrOfCombinations: 0
}
},
locations:
{
String:
{
id: String,
name: String,
type: 0,
nrOfCombinations: 0
}
},
hasSyphons: True,
totalSyphonsInRound: 2
}
}