123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- <?php
- /**
- * @file
- * Contains function relating to drush-integration of this module.
- */
- /**
- * Describes each drush command implemented by the module
- *
- * @return
- * The first line of description when executing the help for a given command
- */
- function tripal_core_drush_help($command) {
- switch ($command) {
- case 'drush:tripal-current-job':
- return dt('Returns details about the currently running tripal job including percent complete.');
- case 'drush:tripal-update-mview':
- return dt('Updates the specified materialized view.');
- }
- }
- /**
- * Registers a drush command and constructs the full help for that command
- *
- * @return
- * And array of command descriptions
- */
- function tripal_core_drush_command() {
- $items = array();
- $items['tripal-current-job'] = array(
- 'description' => dt('Returns details about the currently running tripal job including percent complete.'),
- 'arguments' => array(
- ),
- 'examples' => array(
- 'Standard example' => 'drush tripal-current-job',
- ),
- 'aliases' => array('trpjob-cur'),
- );
- $items['tripal-update-mview'] = array(
- // used by drush help
- 'description' => dt('Updates the specified materialized view.'),
- 'arguments' => array(
- 'mview_id' => dt('The ID of the materialized view to update'),
- 'table_name' => dt('The name of the materialized view table to update.'),
- ),
- 'examples' => array(
- 'By Materialized View ID' => 'drush tripal-update-mview --mview_id=5',
- 'By Table Name' => 'drush tripal-update-mview --table_name=organism_feature_count'
- ),
- // supply options
- 'options' => array(
- 'mview_id',
- 'table_name'
- ),
- 'aliases' => array('trpmv-up')
- );
- $items['tripal-launch-jobs'] = array(
- // used by drush help
- 'description' => dt('Lauches any jobs waiting in the queue.'),
- 'examples' => array(
- 'Normal Job' => 'drush tripal-launch-jobs admin',
- 'Parallel Job' => 'drush tripal-launch-jobs admin --parallel=1'
- ),
- 'arguments' => array(
- 'user' => dt('The Drupal username under which the job should be run. The permissions for this user will be used.'),
- ),
- // supply options
- 'options' => array(
- 'parallel' => dt('Normally jobs are executed one at a time. But if you are certain no conflicts will occur with other currently running jobs you may set this argument to a value of 1 to make the job run in parallel with other running jobs.'),
- 'job_id' => dt('Provide a job_id to run a specific job. Only jobs that have not been run already can be used'),
- ),
- 'aliases' => array('trpjob-run')
- );
- $items['tripal-rerun-job'] = array(
- // used by drush help
- 'description' => dt('Rerun any job in the queue.'),
- 'examples' => array(
- 'Normal Job' => 'drush tripal-rerun-job admin 2',
- 'Parallel Job' => 'drush tripal-rerun-job admin 2 --parallel=1'
- ),
- 'arguments' => array(
- 'user' => dt('The Drupal username under which the job should be run. The permissions for this user will be used.'),
- 'job_id' => dt('The job ID to run.'),
- ),
- // supply options
- 'options' => array(
- 'parallel' => dt('Normally jobs are executed one at a time. But if you are certain no conflicts will occur with other currently running jobs you may set this argument to a value of 1 to make the job run in parallel with other running jobs.'),
- ),
- 'aliases' => array('trpjob-rerun')
- );
- return $items;
- }
- /**
- * Executes jobs in the Tripal Jobs Queue
- *
- * NOTE: The following code is executed when drush 'trpjob-run' or 'drush tripal-launch-jobs' is called
- */
- function drush_tripal_core_tripal_launch_jobs($username) {
- $parallel = drush_get_option('parallel');
- $job_id = drush_get_option('job_id');
- if ($username) {
- global $user;
- $user = user_load(array('name' => $username));
- }
- else {
- drush_print('ERROR: Please provide a username for running this job.');
- return;
- }
-
- if ($parallel) {
- drush_print("Tripal Job Launcher (in parallel)");
- drush_print("Running as user '$username'");
- drush_print("-------------------");
- tripal_jobs_launch($parallel, $job_id);
- }
- else {
- drush_print("Tripal Job Launcher");
- drush_print("Running as user '$username'");
- drush_print("-------------------");
- tripal_jobs_launch(0, $job_id);
- }
- }
- /**
- * Executes jobs in the Tripal Jobs Queue
- *
- * NOTE: The following code is executed when drush 'trpjob-run' or 'drush tripal-launch-jobs' is called
- */
- function drush_tripal_core_tripal_rerun_job($username, $job_id) {
-
- $new_job_id = tripal_jobs_rerun($job_id, FALSE);
- drush_tripal_core_tripal_launch_jobs($username, $new_job_id);
-
- }
- /**
- * Prints details about the current running job
- *
- * NOTE: The following code is executed when 'drush trpjob-curr' or 'drush tripal-current-job' is called
- */
- function drush_tripal_core_tripal_current_job() {
- $sql = "SELECT * FROM {tripal_jobs} TJ ".
- "WHERE TJ.end_time IS NULL and NOT TJ.start_time IS NULL ";
- $jobs = db_query($sql);
- while ($job = db_fetch_object($jobs)) {
- $job_pid = $job->pid;
- $output = "Name: " . $job->job_name . "\n"
- ."Submitted: " . date(DATE_RFC822, $job->submit_date) . "\n"
- ."Started: " . date(DATE_RFC822, $job->start_time) . "\n"
- ."Module: " . $job->modulename . "\n"
- ."Callback: " . $job->callback . "\n"
- ."Process ID: " . $job->pid . "\n"
- ."Progress: " . $job->progress . "%\n";
- drush_print($output);
- }
- if (!$job_pid) {
- drush_print('There are currently no running jobs.');
- }
- //log to the command line with an OK status
- drush_log('Running tripal-current-job', 'ok');
- }
- /**
- * Updates the specified materialized view
- *
- * @param $mview_id
- * The ID of the materialized view (tripal_mview.mview_id)
- * @param $table_name
- * The name of the table storing the materialized view (tripal_mview.mv_table)
- *
- * Note: Either $mview_id OR $table_name is required
- */
- function drush_tripal_core_tripal_update_mview() {
- $mview_id = drush_get_option('mview_id');
- $table_name = drush_get_option('table_name');
- // Either table_name or mview is required
- if (!$mview_id) {
- if ($table_name) {
- // if table_name supplied use that to get mview_id
- $sql = "SELECT mview_id FROM {tripal_mviews} WHERE mv_table='%s'";
- $r = db_fetch_object(db_query($sql, $table_name));
- if (!$r->mview_id) {
- drush_set_error('No Materialized View associated with that table_name.');
- }
- $mview_id=$r->mview_id;
- }
- else {
- drush_set_error('Either mview_id OR table_name are required.');
- }
- }
- drush_print('Updating the Materialized View with ID=' . $mview_id);
- $status = tripal_update_mview($mview_id);
- if ($status) {
- drush_log('Materialized View Updated', 'ok');
- }
- else {
- drush_set_error('Update failed.');
- }
- }
|