| 189 | self.process_state = p.process_state |
| 190 | |
| 191 | def _create_process(self, _desc, _cmd, _args): |
| 192 | ctime = get_current_time(format='%y%m%d%H%M%S%f') |
| 193 | log_dir = os.path.join( |
| 194 | config.SESSION_DB_PATH, 'process_logs' |
| 195 | ) |
| 196 | |
| 197 | def random_number(size): |
| 198 | import secrets |
| 199 | import string |
| 200 | |
| 201 | return ''.join(secrets.choice(string.digits) for _ in range(size)) |
| 202 | |
| 203 | created = False |
| 204 | size = 0 |
| 205 | uid = ctime |
| 206 | while not created: |
| 207 | try: |
| 208 | uid += random_number(size) |
| 209 | log_dir = os.path.join(log_dir, uid) |
| 210 | size += 1 |
| 211 | if not os.path.exists(log_dir): |
| 212 | os.makedirs(log_dir, int('700', 8)) |
| 213 | created = True |
| 214 | except OSError as oe: |
| 215 | import errno |
| 216 | if oe.errno != errno.EEXIST: |
| 217 | raise |
| 218 | |
| 219 | # ID |
| 220 | self.id = ctime |
| 221 | # Description |
| 222 | self.desc = _desc |
| 223 | # Status Acknowledged time |
| 224 | self.atime = None |
| 225 | # Command |
| 226 | self.cmd = _cmd |
| 227 | # Log Directory |
| 228 | self.log_dir = log_dir |
| 229 | # Standard ouput log file |
| 230 | self.stdout = os.path.join(log_dir, 'out') |
| 231 | # Standard error log file |
| 232 | self.stderr = os.path.join(log_dir, 'err') |
| 233 | # Start time |
| 234 | self.stime = None |
| 235 | # End time |
| 236 | self.etime = None |
| 237 | # Exit code |
| 238 | self.ecode = None |
| 239 | # Process State |
| 240 | self.process_state = PROCESS_NOT_STARTED |
| 241 | |
| 242 | # Arguments |
| 243 | self.args = _args |
| 244 | args_csv_io = StringIO() |
| 245 | csv_writer = csv.writer( |
| 246 | args_csv_io, delimiter=str(','), quoting=csv.QUOTE_MINIMAL |
| 247 | ) |
| 248 | csv_writer.writerow(_args) |