22
33import static packetproxy .util .Logging .log ;
44
5- import java .time .Instant ;
65import java .util .ArrayList ;
76import java .util .List ;
87import java .util .Map ;
1312 * 送信系ツールのジョブ管理システム
1413 */
1514public class JobManager {
16-
17- private static JobManager instance ;
18- private final Map <String , PacketSendJob > jobs = new ConcurrentHashMap <>();
19-
20- private JobManager () {}
21-
22- public static synchronized JobManager getInstance () {
23- if (instance == null ) {
24- instance = new JobManager ();
25- }
26- return instance ;
27- }
28-
29- /**
30- * 新しいジョブを作成し、管理対象に追加
31- */
32- public String createJob (String toolName , int totalPacketsToSend ) {
33- String jobId = UUID .randomUUID ().toString ();
34- PacketSendJob job = new PacketSendJob (jobId , toolName , totalPacketsToSend );
35- jobs .put (jobId , job );
36- log ("JobManager: Created job " + jobId + " for tool " + toolName + " (total packets: " + totalPacketsToSend + ")" );
37- return jobId ;
38- }
39-
40- /**
41- * ジョブを取得
42- */
43- public PacketSendJob getJob (String jobId ) {
44- return jobs .get (jobId );
45- }
46-
47- /**
48- * ジョブの送信開始を記録
49- */
50- public void markJobSending (String jobId ) {
51- PacketSendJob job = jobs .get (jobId );
52- if (job != null ) {
53- job .updateStatus (JobStatus .SENDING );
54- log ("JobManager: Job " + jobId + " status changed to SENDING" );
55- }
56- }
57-
58- /**
59- * ジョブの送信完了を記録
60- */
61- public void markJobSent (String jobId , List <Integer > sentPacketIds ) {
62- PacketSendJob job = jobs .get (jobId );
63- if (job != null ) {
64- job .updateStatus (JobStatus .SENT );
65- job .setSentPacketIds (sentPacketIds );
66- log ("JobManager: Job " + jobId + " status changed to SENT with " + sentPacketIds .size () + " sent packets" );
67- }
68- }
69-
70- /**
71- * ジョブのレスポンス受信完了を記録
72- */
73- public void markJobResponseReceived (String jobId , List <Integer > responsePacketIds ) {
74- PacketSendJob job = jobs .get (jobId );
75- if (job != null ) {
76- job .updateStatus (JobStatus .RESPONSE_RECEIVED );
77- job .setResponsePacketIds (responsePacketIds );
78- log ("JobManager: Job " + jobId + " status changed to RESPONSE_RECEIVED with " + responsePacketIds .size () + " response packets" );
79- }
80- }
81-
82- /**
83- * ジョブのエラーを記録
84- */
85- public void markJobError (String jobId , String errorMessage ) {
86- PacketSendJob job = jobs .get (jobId );
87- if (job != null ) {
88- job .updateStatus (JobStatus .ERROR );
89- job .setErrorMessage (errorMessage );
90- log ("JobManager: Job " + jobId + " status changed to ERROR: " + errorMessage );
91- }
92- }
93-
94- /**
95- * 全てのジョブ一覧を取得
96- */
97- public List <PacketSendJob > getAllJobs () {
98- return new ArrayList <>(jobs .values ());
99- }
100-
101- /**
102- * 古いジョブをクリーンアップ(1時間以上経過したもの)
103- */
104- public void cleanup () {
105- long oneHourAgo = System .currentTimeMillis () - (60 * 60 * 1000 );
106- List <String > toRemove = new ArrayList <>();
107-
108- for (Map .Entry <String , PacketSendJob > entry : jobs .entrySet ()) {
109- if (entry .getValue ().getCreatedTime ().toEpochMilli () < oneHourAgo ) {
110- toRemove .add (entry .getKey ());
111- }
112- }
113-
114- for (String jobId : toRemove ) {
115- jobs .remove (jobId );
116- log ("JobManager: Cleaned up old job " + jobId );
117- }
118- }
119- }
15+
16+ private static JobManager instance ;
17+ private final Map <String , PacketSendJob > jobs = new ConcurrentHashMap <>();
18+
19+ private JobManager () {
20+ }
21+
22+ public static synchronized JobManager getInstance () {
23+ if (instance == null ) {
24+ instance = new JobManager ();
25+ }
26+ return instance ;
27+ }
28+
29+ /**
30+ * 新しいジョブを作成し、管理対象に追加
31+ */
32+ public String createJob (String toolName , int totalPacketsToSend ) {
33+ String jobId = UUID .randomUUID ().toString ();
34+ PacketSendJob job = new PacketSendJob (jobId , toolName , totalPacketsToSend );
35+ jobs .put (jobId , job );
36+ log ("JobManager: Created job " + jobId + " for tool " + toolName + " (total packets: " + totalPacketsToSend
37+ + ")" );
38+ return jobId ;
39+ }
40+
41+ /**
42+ * ジョブを取得
43+ */
44+ public PacketSendJob getJob (String jobId ) {
45+ return jobs .get (jobId );
46+ }
47+
48+ /**
49+ * ジョブの送信開始を記録
50+ */
51+ public void markJobSending (String jobId ) {
52+ PacketSendJob job = jobs .get (jobId );
53+ if (job != null ) {
54+ job .updateStatus (JobStatus .SENDING );
55+ log ("JobManager: Job " + jobId + " status changed to SENDING" );
56+ }
57+ }
58+
59+ /**
60+ * ジョブの送信完了を記録
61+ */
62+ public void markJobSent (String jobId , List <Integer > sentPacketIds ) {
63+ PacketSendJob job = jobs .get (jobId );
64+ if (job != null ) {
65+ job .updateStatus (JobStatus .SENT );
66+ job .setSentPacketIds (sentPacketIds );
67+ log ("JobManager: Job " + jobId + " status changed to SENT with " + sentPacketIds .size () + " sent packets" );
68+ }
69+ }
70+
71+ /**
72+ * ジョブのレスポンス受信完了を記録
73+ */
74+ public void markJobResponseReceived (String jobId , List <Integer > responsePacketIds ) {
75+ PacketSendJob job = jobs .get (jobId );
76+ if (job != null ) {
77+ job .updateStatus (JobStatus .RESPONSE_RECEIVED );
78+ job .setResponsePacketIds (responsePacketIds );
79+ log ("JobManager: Job " + jobId + " status changed to RESPONSE_RECEIVED with " + responsePacketIds .size ()
80+ + " response packets" );
81+ }
82+ }
83+
84+ /**
85+ * ジョブのエラーを記録
86+ */
87+ public void markJobError (String jobId , String errorMessage ) {
88+ PacketSendJob job = jobs .get (jobId );
89+ if (job != null ) {
90+ job .updateStatus (JobStatus .ERROR );
91+ job .setErrorMessage (errorMessage );
92+ log ("JobManager: Job " + jobId + " status changed to ERROR: " + errorMessage );
93+ }
94+ }
95+
96+ /**
97+ * 全てのジョブ一覧を取得
98+ */
99+ public List <PacketSendJob > getAllJobs () {
100+ return new ArrayList <>(jobs .values ());
101+ }
102+
103+ /**
104+ * 古いジョブをクリーンアップ(1時間以上経過したもの)
105+ */
106+ public void cleanup () {
107+ long oneHourAgo = System .currentTimeMillis () - (60 * 60 * 1000 );
108+ List <String > toRemove = new ArrayList <>();
109+
110+ for (Map .Entry <String , PacketSendJob > entry : jobs .entrySet ()) {
111+ if (entry .getValue ().getCreatedTime ().toEpochMilli () < oneHourAgo ) {
112+ toRemove .add (entry .getKey ());
113+ }
114+ }
115+
116+ for (String jobId : toRemove ) {
117+ jobs .remove (jobId );
118+ log ("JobManager: Cleaned up old job " + jobId );
119+ }
120+ }
121+ }
0 commit comments