5
5
using System . Linq ;
6
6
using Newtonsoft . Json ;
7
7
using Unity . Attributes ;
8
- using xmr_stak_bootstrap . Model ;
8
+ using XmrStakBootstrap . Common ;
9
+ using XmrStakBootstrap . MasterConfiguration . Model ;
10
+ using XmrStakBootstrap . RunConfiguration . Model ;
9
11
10
- namespace xmr_stak_bootstrap
12
+ namespace XmrStakBootstrap . Core . Runner . Miner
11
13
{
12
- public class Runner : IRunner
14
+ public class MinerRunner : IRunner
13
15
{
14
- //TODO: can be refactored further to classes
15
-
16
16
[ Dependency ]
17
17
public IFinalizer Finalizer { get ; set ; }
18
18
19
19
[ Dependency ]
20
- public Lazy < ISampleConfigurationGenerator > SampleConfigurationGenerator { get ; set ; }
20
+ public RunConfigurationModel RunConfigurationModel { get ; set ; }
21
+
22
+ [ Dependency ]
23
+ public MasterConfigurationModel MasterConfigurationModel { get ; set ; }
21
24
22
- public void Run ( RunConfiguration args )
25
+ public void Run ( )
23
26
{
24
- if ( args . GenerateConfigurationOnly )
27
+ if ( MasterConfigurationModel == null )
25
28
{
26
- SampleConfigurationGenerator . Value . Generate ( args . MasterConfiguration ) ;
29
+ Console . WriteLine ( @"Master configuration file '{0}' was not loaded. Try running this program with argument --help." , RunConfigurationModel . MasterConfiguration ) ;
30
+ return ;
27
31
}
28
- else
29
- {
30
- if ( ! File . Exists ( args . MasterConfiguration ) )
31
- {
32
- Console . WriteLine ( @"Configuration file '{0}' does not exist. Try running this program with argument --help." , args . MasterConfiguration ) ;
33
- return ;
34
- }
35
32
36
- DoRun ( args ) ;
37
- }
33
+ DoRun ( ) ;
38
34
}
39
35
40
- private void DoRun ( RunConfiguration args )
36
+ private void DoRun ( )
41
37
{
42
- var contents = File . ReadAllText ( args . MasterConfiguration ) ;
43
- var configuration = JsonConvert . DeserializeObject < MasterConfiguration > ( contents ) ;
44
-
45
- var activeSolution = GetActiveSolution ( args , configuration ) ;
38
+ var activeSolution = GetActiveSolution ( ) ;
46
39
KillMiners ( ) ;
47
40
48
- var solution = configuration . SolutionConfiguration . SolutionProfiles . GetValue ( activeSolution ) ;
41
+ var solution = MasterConfigurationModel . SolutionConfiguration . SolutionProfiles . GetValue ( activeSolution ) ;
49
42
foreach ( var instances in solution )
50
43
{
51
- var outputPools = GetOutputPools ( configuration , instances ) ;
44
+ var outputPools = GetOutputPools ( instances ) ;
52
45
53
46
if ( outputPools . Count == 0 )
54
47
{
55
48
Console . WriteLine ( @"Solution does not contain any pool bindings." ) ;
56
49
continue ;
57
50
}
58
51
59
- var configArgument = GetConfigurationArgument ( configuration , outputPools ) ;
52
+ var configArgument = GetConfigurationArgument ( outputPools ) ;
60
53
61
54
foreach ( var instance in instances . Value )
62
55
{
63
- var entry = configuration . InstanceConfiguration . InstanceProfiles . GetValue ( instance ) ;
56
+ var entry = MasterConfigurationModel . InstanceConfiguration . InstanceProfiles . GetValue ( instance ) ;
64
57
65
- var cpuArgument = GetCpuArgument ( configuration , entry ) ;
66
- var amdArgument = GetAmdArgument ( configuration , entry ) ;
67
- var nvidiaArgument = GetNvidiaArgument ( configuration , entry ) ;
58
+ var cpuArgument = GetCpuArgument ( entry ) ;
59
+ var amdArgument = GetAmdArgument ( entry ) ;
60
+ var nvidiaArgument = GetNvidiaArgument ( entry ) ;
68
61
69
62
RunMiner ( $ "{ configArgument } { cpuArgument } { amdArgument } { nvidiaArgument } ") ;
70
63
}
71
64
}
72
65
}
73
66
74
- private static string GetActiveSolution ( RunConfiguration args , MasterConfiguration configuration )
67
+ private string GetActiveSolution ( )
75
68
{
76
- var activeSolution = args . ActiveSolutionConfiguration ;
69
+ //TODO: rewrite once configuration is changed
70
+ var activeSolution = RunConfigurationModel . ActiveSolutionConfiguration ;
77
71
78
72
while ( string . IsNullOrEmpty ( activeSolution ) )
79
73
{
80
74
Console . WriteLine ( @"Available solutions: " ) ;
81
- var keys = configuration . SolutionConfiguration . SolutionProfiles . Keys . OrderBy ( x => x ) . ToList ( ) ;
75
+ var keys = MasterConfigurationModel . SolutionConfiguration . SolutionProfiles . Keys . ToList ( ) ;
82
76
var i = 0 ;
83
77
foreach ( var key in keys )
84
78
{
@@ -96,13 +90,13 @@ private static string GetActiveSolution(RunConfiguration args, MasterConfigurati
96
90
return activeSolution ;
97
91
}
98
92
99
- private static List < PrioritizedPoolEntry > GetOutputPools ( MasterConfiguration configuration , KeyValuePair < string , IList < string > > instances )
93
+ private List < PrioritizedPoolEntry > GetOutputPools ( KeyValuePair < string , IList < string > > instances )
100
94
{
101
- return configuration
95
+ return MasterConfigurationModel
102
96
. PoolConfiguration
103
97
. PoolSets . GetValue ( instances . Key )
104
98
. Reverse ( )
105
- . Select ( x => configuration . PoolConfiguration . Pools . GetValue ( x ) )
99
+ . Select ( x => MasterConfigurationModel . PoolConfiguration . Pools . GetValue ( x ) )
106
100
. Select ( ( x , i ) => new PrioritizedPoolEntry
107
101
{
108
102
PoolWeight = i + 1 ,
@@ -116,7 +110,7 @@ private static List<PrioritizedPoolEntry> GetOutputPools(MasterConfiguration con
116
110
. ToList ( ) ;
117
111
}
118
112
119
- private void RunMiner ( string arguments )
113
+ private static void RunMiner ( string arguments )
120
114
{
121
115
var startInfo = new ProcessStartInfo ( Path . GetFullPath ( "xmr-stak.exe" ) , arguments )
122
116
{
@@ -128,51 +122,51 @@ private void RunMiner(string arguments)
128
122
Process . Start ( startInfo ) ;
129
123
}
130
124
131
- private string GetConfigurationArgument ( MasterConfiguration configuration , List < PrioritizedPoolEntry > pools )
125
+ private string GetConfigurationArgument ( IReadOnlyCollection < PrioritizedPoolEntry > pools )
132
126
{
133
- var configPath = CreateTemporaryConfiguration ( configuration . ConfigTemplate , "config" , "%POOLS%" , pools ) ;
127
+ var configPath = CreateTemporaryConfiguration ( MasterConfigurationModel . ConfigTemplate , "config" , "%POOLS%" , pools ) ;
134
128
ScheduleFileDelete ( configPath ) ;
135
129
136
130
return $ "--config \" { configPath } \" ";
137
131
}
138
132
139
- private string GetCpuArgument ( MasterConfiguration configuration , InstanceEntry entry )
133
+ private string GetCpuArgument ( InstanceEntry entry )
140
134
{
141
135
if ( string . IsNullOrEmpty ( entry . CpuProfile ) )
142
136
{
143
137
return "--noCPU" ;
144
138
}
145
139
146
- var cpuProfile = configuration . CpuConfiguration . Profiles . GetValue ( entry . CpuProfile ) ;
147
- var path = CreateTemporaryConfiguration ( configuration . CpuTemplate , "cpu" , "%THREADS%" , cpuProfile ) ;
140
+ var cpuProfile = MasterConfigurationModel . CpuConfiguration . Profiles . GetValue ( entry . CpuProfile ) ;
141
+ var path = CreateTemporaryConfiguration ( MasterConfigurationModel . CpuTemplate , "cpu" , "%THREADS%" , cpuProfile ) ;
148
142
ScheduleFileDelete ( path ) ;
149
143
150
144
return $ "--cpu \" { path } \" ";
151
145
}
152
146
153
- private string GetAmdArgument ( MasterConfiguration configuration , InstanceEntry entry )
147
+ private string GetAmdArgument ( InstanceEntry entry )
154
148
{
155
149
if ( entry . AmdProfiles == null || entry . AmdProfiles . Count == 0 )
156
150
{
157
151
return "--noAMD" ;
158
152
}
159
153
160
- var amdProfile = entry . AmdProfiles . SelectMany ( x => configuration . AmdConfiguration . Profiles . GetValue ( x ) ) . ToList ( ) ;
161
- var path = CreateTemporaryConfiguration ( configuration . AmdTemplate , "amd" , "%THREADS%" , amdProfile ) ;
154
+ var amdProfile = entry . AmdProfiles . SelectMany ( x => MasterConfigurationModel . AmdConfiguration . Profiles . GetValue ( x ) ) . ToList ( ) ;
155
+ var path = CreateTemporaryConfiguration ( MasterConfigurationModel . AmdTemplate , "amd" , "%THREADS%" , amdProfile ) ;
162
156
ScheduleFileDelete ( path ) ;
163
157
164
158
return $ "--amd \" { path } \" ";
165
159
}
166
160
167
- private string GetNvidiaArgument ( MasterConfiguration configuration , InstanceEntry entry )
161
+ private string GetNvidiaArgument ( InstanceEntry entry )
168
162
{
169
163
if ( entry . NvidiaProfiles == null || entry . NvidiaProfiles . Count == 0 )
170
164
{
171
165
return "--noNVIDIA" ;
172
166
}
173
167
174
- var nvidiaProfile = entry . NvidiaProfiles . SelectMany ( x => configuration . NvidiaConfiguration . Profiles . GetValue ( x ) ) . ToList ( ) ;
175
- var path = CreateTemporaryConfiguration ( configuration . NvidiaTemplate , "nvidia" , "%THREADS%" , nvidiaProfile ) ;
168
+ var nvidiaProfile = entry . NvidiaProfiles . SelectMany ( x => MasterConfigurationModel . NvidiaConfiguration . Profiles . GetValue ( x ) ) . ToList ( ) ;
169
+ var path = CreateTemporaryConfiguration ( MasterConfigurationModel . NvidiaTemplate , "nvidia" , "%THREADS%" , nvidiaProfile ) ;
176
170
ScheduleFileDelete ( path ) ;
177
171
178
172
return $ "--nvidia \" { path } \" ";
0 commit comments