def handle(self, root_job_id, **options): root_job = Job.objects.get(id=int(root_job_id)) samples = int(options['samples']) # Add all system task nodes. system = Node('system') system.add( Node(root_job.id, duration=root_job.get_run_length_estimate(samples=samples))) print('%s takes about %s seconds' \ % (root_job, root_job.get_run_length_estimate(samples=samples))) chain = root_job.get_chained_jobs() for job in chain: print('%s takes about %s seconds' \ % (job, job.get_run_length_estimate(samples=samples))) node = Node(job.id, duration=job.get_run_length_estimate(samples=samples)) node.description = job.name system.add(node) # Add all links between task nodes. print('-' * 80) for job in chain: if not job.enabled: continue dependees = JobDependency.objects.filter(dependent=job, dependee__enabled=True) dependees = dependees.values_list('dependee_id', flat=True) print(job, dependees) for dependee in dependees: # Link dependent job to dependee. assert job.id != 1 system.link(from_node=dependee, to_node=job.id) root_node = system.lookup_node(1) print('root_node:', root_node, root_node.to_nodes, root_node.incoming_nodes) system.add_exit() sys.stdout.flush() #return print('Updating values...') system.update_all() critical_path = system.get_critical_path() print('critical_path:', critical_path) system.print_times() print('min hours:', system.duration * (1 / 60.) * (1 / 60.))
def handle(self, root_job_id, **options): root_job = Job.objects.get(id=int(root_job_id)) samples = int(options['samples']) # Add all system task nodes. system = Node('system') system.add(Node(root_job.id, duration=root_job.get_run_length_estimate(samples=samples))) print('%s takes about %s seconds' \ % (root_job, root_job.get_run_length_estimate(samples=samples))) chain = root_job.get_chained_jobs() for job in chain: print('%s takes about %s seconds' \ % (job, job.get_run_length_estimate(samples=samples))) node = Node(job.id, duration=job.get_run_length_estimate(samples=samples)) node.description = job.name system.add(node) # Add all links between task nodes. print('-'*80) for job in chain: if not job.enabled: continue dependees = JobDependency.objects.filter(dependent=job, dependee__enabled=True) dependees = dependees.values_list('dependee_id', flat=True) print(job, dependees) for dependee in dependees: # Link dependent job to dependee. assert job.id != 1 system.link(from_node=dependee, to_node=job.id) root_node = system.lookup_node(1) print('root_node:', root_node, root_node.to_nodes, root_node.incoming_nodes) system.add_exit() sys.stdout.flush() #return print('Updating values...') system.update_all() critical_path = system.get_critical_path() print('critical_path:', critical_path) system.print_times() print('min hours:', system.duration*(1/60.)*(1/60.))