Files @ 5a4b1484f2ba
Branch filter:

Location: DistRen/src/server/distrenjob.h

LordOfWar
-re-wrote frame finder to work with any type of job and the linked list
-i did not finish destroying status_report_generator()
-added variable is_job_done to distrenjob structure... so frame finder can find a job, then find the components of the not done job by looking at its type
/*
  Copyright 2009 Nathan Phillip Brink, Ethan Zonca, Matthew Orlando

  This file is a part of DistRen.

  DistRen is free software: you can redistribute it and/or modify
  it under the terms of the GNU Affero General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  DistRen is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU Affero General Public License for more details.

  You should have received a copy of the GNU Affero General Public License
  along with DistRen.  If not, see <http://www.gnu.org/licenses/>.

*/

#ifndef _DISTREN_DISTRENJOB_H
#define _DISTREN_DISTRENJOB_H

/**
   This file stores the distrenjob and frameset structs and prototypes for some functions to manipulate/use these.
 */

#include <time.h> /* clock_t, time_t */

typedef unsigned int jobnum_t;

/**
   Stores Blender Job Info
*/
struct distrenjob {
  struct distrenjob *next; /*< next will be NULL unless if there is another distrenjob */
  short int type; // 1:Blender, 2:something else
  short int is_job_done; // so job finder can tell if the job is done no matter what type of job it is
  char *name;
  char *submitter;
  char *email; /*< This should be looked up based on the value of submitter, not stored in this struct */
  jobnum_t jobnum;
  int priority;  // 1 is lowest, 10 is highest, 0 means the job is done
  float percent_done;
  int completed_frames; // number of completed frames for stats/etc
  int assigned_frames; // number of assigned frames (that are not yet completed) for stats/etc
  int total_frames; // how many frames are in the animation for stats/etc (unassigned frames)
  int watchdog_forgiveness; // how many hours till the frame is re-assigned (if client computer crashes etc);
  time_t avg_render_time; // average seconds it took to render a frame
  time_t time_remaining; /*< estimated seconds remaining till render is complete (up to 49, 710 days) */
  char *output_format; /*< currently is the file extention of the request output format. @todo make this mime-type based/not a string */
  struct frameset *frameset;
};



/**
   Frameset Structure
*/
struct frameset {
  int num; /*< frame number to render */
  char slave_name; /*< user that frame is assigned to */
  int status; /*< status of frame, 0= unassigned, 1= taken, 2= done */
  clock_t start_time; /*< time the frame was started */
  int time_to_render; /*< the total seconds it took to render the frame */
}; /* Frameset array is generated by status_report_generator() */


/*
related functions
*/

/**

   @param distrenjob the address where we will store the pointer of a malloc()ed
   distrenjob struct.
   @param pathtoxml filename/pathname of the xml file to be read into a distrenjob struct
 */
int xml2distrenjob(struct distrenjob **distrenjob, char *pathtoxml);

/**
   support function for xml2distrenjob() to help cleaning up a
   struct distrenjob when it is incompletely initialized.
   Also acts as a general-purpose struct distrenjob free()er ;-)
 */
void distrenjob_free(struct distrenjob **distrenjob);

/**
   initializes an empty, pointless struct distrenjob. This
   DOES run malloc() for you. It could return nonzero on error,
   but there are no errors to have yet (except for nomem). This
   sets all char* to NULL.
 */
int distrenjob_new(struct distrenjob **distrenjob);

#endif