@@ -19,7 +19,7 @@ class DnaMatching implements ShouldQueue
1919 use Queueable;
2020 use SerializesModels;
2121
22- public int $ timeout = 0 ;
22+ public int $ timeout = 3600 ; // Changed from 0 to 1 hour
2323 public int $ tries = 1 ;
2424
2525 /**
@@ -41,85 +41,100 @@ public function handle(): void
4141 $ mpath = app_path ();
4242
4343 foreach ($ dnas as $ dna ) {
44- Log::info (json_encode ($ dna , JSON_THROW_ON_ERROR ));
45- Log::info (storage_path ('/app/public/dna/output/shared_dna_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_ ' .$ this ->file_name .'_ ' .$ dna ->file_name ));
46- // system('/usr/bin/python3 /home/genealogia/public_html/dna.py ' . $this->var_name . ' ' . $dna->variable_name . ' ' . '/home/genealogia/public_html/storage/app/dna/'. $this->file_name . ' ' . '/home/genealogia/public_html/storage/app/dna/'. $dna->file_name);
47- // chdir('/home/familytree365/domains/api.familytree365.com/genealogy/app');
48- chdir ($ mpath );
49- $ result = \Illuminate \Support \Facades \Artisan::call ('dna:match ' , [
50- 'varName1 ' => $ this ->var_name ,
51- 'fileName1 ' => $ this ->file_name ,
52- 'varName2 ' => $ dna ->variable_name ,
53- 'fileName2 ' => $ dna ->file_name ,
54- ]);
55- $ resultData = json_decode ($ result , true , 512 , JSON_THROW_ON_ERROR );
56- // Remove these redundant json_decode calls that could cause issues
57- // $resultData = json_decode($result, true, 512, JSON_THROW_ON_ERROR);
58- // $resultData = json_decode($result, true, 512, JSON_THROW_ON_ERROR);
59- // chmod(storage_path('/app/public/dna/output/shared_dna_'.$this->var_name.'_'.$dna->variable_name.'_'.$this->file_name.'_'.$dna->file_name), 0777);
60-
61- $ dm = new DM ();
62- $ dm ->user_id = $ user ->id ;
63- $ dm ->match_id = $ dna ->user_id ;
64- $ match_name_user = User::with ('person ' )->find ($ dna ->user_id );
65- $ match_name = $ match_name_user ->person ->name ;
66- $ dm ->match_name = $ match_name ;
67- // $dm->image = 'shared_dna_'.$this->var_name.'_'.$dna->variable_name.'.png';
68- // $dm->image = 'shared_dna_'.$this->var_name.'_'.$dna->variable_name.'_0p75cM_1100snps_GRCh37_HapMap2.png';
69- $ dm ->image = env ('APP_URL ' ).'/storage/dna/output/shared_dna_ ' .$ this ->var_name .'_ ' .
70- $ dna ->variable_name .'_0p75cM_1100snps_GRCh37_HapMap2.png ' ;
71- // $dm->file1 = 'discordant_snps_'.$this->var_name.'_'.$dna->variable_name.'_GRCh37.csv';
72- $ dm ->file1 = 'discordant_snps_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_GRCh37.csv ' ;
73- // $dm->file2 = 'shared_dna_one_chrom_'.$this->var_name.'_'.$dna->variable_name.'_GRCh37.csv';
74- $ dm ->file2 = 'shared_dna_one_chrom_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_0p75cM_1100snps_GRCh37_HapMap2.csv ' ;
75-
76- $ dm ->total_shared_cm = round ($ resultData ['total_cms ' ], 2 );
77- $ dm ->largest_cm_segment = round ($ resultData ['largest_cm ' ], 2 );
78-
79- $ dm ->save ();
80- if ($ dna ->user_id !== $ user ->id ) {
81- $ dm2 = new DM ();
82- $ dm2 ->user_id = $ dna ->user_id ;
83- $ dm2 ->match_id = $ user ->id ;
44+ try {
45+ Log::info (json_encode ($ dna , JSON_THROW_ON_ERROR ));
46+ Log::info (storage_path ('/app/public/dna/output/shared_dna_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_ ' .$ this ->file_name .'_ ' .$ dna ->file_name ));
47+
48+ chdir ($ mpath );
49+
50+ // Store output to variable instead of directly decoding
51+ \Illuminate \Support \Facades \Artisan::call ('dna:match ' , [
52+ 'varName1 ' => $ this ->var_name ,
53+ 'fileName1 ' => $ this ->file_name ,
54+ 'varName2 ' => $ dna ->variable_name ,
55+ 'fileName2 ' => $ dna ->file_name ,
56+ ]);
57+
58+ // Get the output from the command
59+ $ output = \Illuminate \Support \Facades \Artisan::output ();
60+ $ resultData = json_decode ($ output , true , 512 , JSON_THROW_ON_ERROR );
61+
62+ if (!$ resultData ) {
63+ Log::error ('Failed to decode DNA match result: ' . $ output );
64+ continue ;
65+ }
66+
67+ // Remove these redundant json_decode calls that could cause issues
68+ // $resultData = json_decode($result, true, 512, JSON_THROW_ON_ERROR);
69+ // $resultData = json_decode($result, true, 512, JSON_THROW_ON_ERROR);
70+ // chmod(storage_path('/app/public/dna/output/shared_dna_'.$this->var_name.'_'.$dna->variable_name.'_'.$this->file_name.'_'.$dna->file_name), 0777);
71+
72+ $ dm = new DM ();
73+ $ dm ->user_id = $ user ->id ;
74+ $ dm ->match_id = $ dna ->user_id ;
8475 $ match_name_user = User::with ('person ' )->find ($ dna ->user_id );
85- $ dm2 ->match_name = $ match_name_user ->person ->name ;
76+ $ match_name = $ match_name_user ->person ->name ;
77+ $ dm ->match_name = $ match_name ;
8678 // $dm->image = 'shared_dna_'.$this->var_name.'_'.$dna->variable_name.'.png';
8779 // $dm->image = 'shared_dna_'.$this->var_name.'_'.$dna->variable_name.'_0p75cM_1100snps_GRCh37_HapMap2.png';
88- $ dm2 ->image = env ('APP_URL ' ).'/storage/dna/output/shared_dna_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_0p75cM_1100snps_GRCh37_HapMap2.png ' ;
80+ $ dm ->image = env ('APP_URL ' ).'/storage/dna/output/shared_dna_ ' .$ this ->var_name .'_ ' .
81+ $ dna ->variable_name .'_0p75cM_1100snps_GRCh37_HapMap2.png ' ;
8982 // $dm->file1 = 'discordant_snps_'.$this->var_name.'_'.$dna->variable_name.'_GRCh37.csv';
90- $ dm2 ->file1 = 'discordant_snps_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_GRCh37.csv ' ;
83+ $ dm ->file1 = 'discordant_snps_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_GRCh37.csv ' ;
9184 // $dm->file2 = 'shared_dna_one_chrom_'.$this->var_name.'_'.$dna->variable_name.'_GRCh37.csv';
92- $ dm2 ->file2 = 'shared_dna_one_chrom_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_0p75cM_1100snps_GRCh37_HapMap2.csv ' ;
85+ $ dm ->file2 = 'shared_dna_one_chrom_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_0p75cM_1100snps_GRCh37_HapMap2.csv ' ;
86+
87+ $ dm ->total_shared_cm = round ($ resultData ['total_cms ' ], 2 );
88+ $ dm ->largest_cm_segment = round ($ resultData ['largest_cm ' ], 2 );
89+
90+ $ dm ->save ();
91+ if ($ dna ->user_id !== $ user ->id ) {
92+ $ dm2 = new DM ();
93+ $ dm2 ->user_id = $ dna ->user_id ;
94+ $ dm2 ->match_id = $ user ->id ;
95+ $ match_name_user = User::with ('person ' )->find ($ dna ->user_id );
96+ $ dm2 ->match_name = $ match_name_user ->person ->name ;
97+ // $dm->image = 'shared_dna_'.$this->var_name.'_'.$dna->variable_name.'.png';
98+ // $dm->image = 'shared_dna_'.$this->var_name.'_'.$dna->variable_name.'_0p75cM_1100snps_GRCh37_HapMap2.png';
99+ $ dm2 ->image = env ('APP_URL ' ).'/storage/dna/output/shared_dna_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_0p75cM_1100snps_GRCh37_HapMap2.png ' ;
100+ // $dm->file1 = 'discordant_snps_'.$this->var_name.'_'.$dna->variable_name.'_GRCh37.csv';
101+ $ dm2 ->file1 = 'discordant_snps_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_GRCh37.csv ' ;
102+ // $dm->file2 = 'shared_dna_one_chrom_'.$this->var_name.'_'.$dna->variable_name.'_GRCh37.csv';
103+ $ dm2 ->file2 = 'shared_dna_one_chrom_ ' .$ this ->var_name .'_ ' .$ dna ->variable_name .'_0p75cM_1100snps_GRCh37_HapMap2.csv ' ;
104+
105+ $ dm2 ->total_shared_cm = round ($ resultData ['total_cms ' ], 2 );
106+ $ dm2 ->largest_cm_segment = round ($ resultData ['largest_cm ' ], 2 );
107+
108+ $ dm2 ->save ();
109+ }
110+ // $data = readCSV(storage_path('app'.DIRECTORY_SEPARATOR.'dna'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.$dm->file1), ',');
111+ // array_shift($data);
112+ // $data = writeCSV(storage_path('app'.DIRECTORY_SEPARATOR.'dna'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.$dm->file1), $data);
113+
114+ // $data = readCSV(storage_path('app'.DIRECTORY_SEPARATOR.'dna'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.$dm->file2), ',');
115+ // array_shift($data);
93116
94- $ dm2 ->total_shared_cm = round ($ resultData ['total_cms ' ], 2 );
95- $ dm2 ->largest_cm_segment = round ($ resultData ['largest_cm ' ], 2 );
117+ // $temp_data = $data;
118+ // array_shift($temp_data);
119+ // array_shift($temp_data);
120+ // $total_cms = 0;
121+ // $largest_cm = 0;
122+ // foreach ($temp_data as $line) {
123+ // if ($line[4] >= $largest_cm) {
124+ // $largest_cm = $line[4];
125+ // }
126+ // $total_cms = $total_cms + $line[4];
127+ // }
128+ // $dm->user_id = $user->id;
129+ // $dm->total_shared_cm = $total_cms;
130+ // $dm->largest_cm_segment = round($largest_cm, 2);
131+ // $dm->save();
96132
97- $ dm2 ->save ();
133+ // $data = writeCSV(storage_path('app'.DIRECTORY_SEPARATOR.'dna'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.$dm->file2), $data);
134+ } catch (\Exception $ e ) {
135+ Log::error ('Error in DNA matching job: ' . $ e ->getMessage ());
136+ continue ; // Skip to next DNA record on error
98137 }
99- // $data = readCSV(storage_path('app'.DIRECTORY_SEPARATOR.'dna'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.$dm->file1), ',');
100- // array_shift($data);
101- // $data = writeCSV(storage_path('app'.DIRECTORY_SEPARATOR.'dna'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.$dm->file1), $data);
102-
103- // $data = readCSV(storage_path('app'.DIRECTORY_SEPARATOR.'dna'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.$dm->file2), ',');
104- // array_shift($data);
105-
106- // $temp_data = $data;
107- // array_shift($temp_data);
108- // array_shift($temp_data);
109- // $total_cms = 0;
110- // $largest_cm = 0;
111- // foreach ($temp_data as $line) {
112- // if ($line[4] >= $largest_cm) {
113- // $largest_cm = $line[4];
114- // }
115- // $total_cms = $total_cms + $line[4];
116- // }
117- // $dm->user_id = $user->id;
118- // $dm->total_shared_cm = $total_cms;
119- // $dm->largest_cm_segment = round($largest_cm, 2);
120- // $dm->save();
121-
122- // $data = writeCSV(storage_path('app'.DIRECTORY_SEPARATOR.'dna'.DIRECTORY_SEPARATOR.'output'.DIRECTORY_SEPARATOR.$dm->file2), $data);
123138 }
124139 }
125140}
0 commit comments