protected function createSchemata()

in web_ui/src/applications/bistro/prefs/BistroJobListPrefs.php [96:233]


  protected function createSchemata() {
    return array_merge(
      parent::createSchemata(),
      array(
        // SEC_FETCHER
        self::PREF_JOBS => array(
          self::LABEL => 'Only fetch job IDs:',
          self::CAPTION =>
            'JSON list or space-separated; blank for "all jobs".',
          self::DEFAULT_VALUE => '',
          self::SECTION => self::SEC_FETCHER,
          self::TYPE => self::TYPE_STR),
        self::PREF_DEPRECATED_JOB_IDS => array(  // Use JOBS instead
          // IMPORTANT: I extend get() and below to use JOB_IDS as a
          // fallback for JOBS.  Delete that code when deleting JOB_IDS.
          self::LABEL => 'DEPRECATED: Only fetch job IDs:',
          self::CAPTION =>
            'DEPRECATED: Comma-separated; blank for "all jobs".',
          self::DEFAULT_VALUE => '',
          self::SECTION => self::SEC_FETCHER,
          self::TYPE => self::TYPE_STR,
          // Hide the query form control for this deprecated field.
          self::CONTROL => array('bistro_make_hidden_text_control', array())),
        self::PREF_JOB_ID_REGEX => array(
          self::LABEL => 'Regex for job IDs',
          self::CAPTION => 'Use ".*" for "all jobs". If blank, falls back '.
          'to the "'.self::PREF_DEFAULT_JOB_ID_REGEX.'" pref.',
          self::DEFAULT_VALUE => '',
          self::SECTION => self::SEC_FETCHER,
          self::TYPE => self::TYPE_STR),
        self::PREF_SAMPLE_SHARDS => array(
          self::LABEL => 'Sample Node Names',
          self::DEFAULT_VALUE => 2,
          self::UNITS => ' nodes',
          self::SECTION => self::SEC_FETCHER,
          self::TYPE => self::TYPE_INT),
        self::PREF_SEGMENT_NODES => array(
          self::LABEL => 'Segment Node Names',
          self::DEFAULT_VALUE => '{}',
          self::CAPTION =>
            'Sample usage: {"level_name": {"pcre": "/_(.[0-9])$/", '.
            '"render": "timestamp"}}. Segment nodes of certain levels '.
            'using a parenthesized subpattern of a PCRE regex. Each '.
            'segment is shown as a separate bar. Only works if '.
            'sample_shards is high enough.',
          self::SECTION => self::SEC_FETCHER,
          self::TYPE => self::TYPE_STR),
        self::PREF_SORT_BY => $this->createDropdownSchema(array(
          self::LABEL => 'Sort by',
          self::CAPTION =>
            // TODO: Make paging work better.
            'Only sorts the jobs that were fetched on the current page -- '.
            'does not page jobs in the order requested.',
          self::SECTION => self::SEC_FETCHER,
          self::TYPE => self::TYPE_STR,
          self::ALLOWED_VALUES => $this->makeSortOrders())),

        // SEC_VALIDATION
        self::PREF_MAX_RUNTIME => array(
          self::LABEL => 'Max Task Runtime',
          self::DEFAULT_VALUE => 3600,
          self::UNITS => ' seconds',
          self::SECTION => self::SEC_VALIDATION,
          self::TYPE => self::TYPE_INT),
        self::PREF_WARN_STALENESS => array(
          self::LABEL => 'Warning Instance Staleness',
          self::DEFAULT_VALUE => 600,
          self::UNITS => ' seconds',
          self::SECTION => self::SEC_VALIDATION,
          self::TYPE => self::TYPE_INT),
        self::PREF_ERR_STALENESS => array(
          self::LABEL => 'Error Instance Staleness',
          self::DEFAULT_VALUE => 900,
          self::UNITS => ' seconds',
          self::SECTION => self::SEC_VALIDATION,
          self::TYPE => self::TYPE_INT),
        self::PREF_NODE_COUNT_RANGES => array(
          self::LABEL => 'Per-Level Node Count Ranges',
          self::CAPTION =>
            'A JSON object of {"level_name": [min, max number of nodes]}.',
          self::DEFAULT_VALUE => '{}',
          self::SECTION => self::SEC_VALIDATION,
          self::TYPE => self::TYPE_STR),

        // SEC_PAGINATION
        self::PREF_PAGE_SIZE => array(
          self::LABEL => 'Jobs Per Page',
          self::DEFAULT_VALUE => 250,
          self::UNITS => ' jobs',
          self::SECTION => self::SEC_PAGINATION,
          self::TYPE => self::TYPE_INT),
        self::PREF_PAGE_OFFSET => array(
          self::LABEL => 'Page #',
          self::CAPTION => '0-base index of the job to show.',
          self::DEFAULT_VALUE => 0,
          self::SECTION => self::SEC_PAGINATION,
          self::TYPE => self::TYPE_INT),

        // SEC_TWEAKS
        self::PREF_GET_NODE_NAMES => $this->createBooleanSchema(array(
          self::LABEL => 'Get node names',
          self::CAPTION =>
            'A nonzero value makes us fetch node names, which are essential '.
            'for several sanity checks, but cause some perf overhead.',
          self::DEFAULT_VALUE => 1,
          self::SECTION => self::SEC_TWEAKS)),
        self::PREF_HIDE_LEVELS => array(
          self::LABEL => 'Hide levels',
          self::CAPTION => 'A JSON array of ["level to hide", ...].',
          self::DEFAULT_VALUE => '[]',
          self::SECTION => self::SEC_TWEAKS,
          self::TYPE => self::TYPE_STR),
        self::PREF_HIDE_RUNNING_TASK_SUMMARIES => $this->createBooleanSchema(
          array(
            self::LABEL => 'Hide running task summaries',
            self::CAPTION =>
              'If you have many jobs with few tasks, these summary bars are '.
              'not very informative',
            self::DEFAULT_VALUE => 0,
            self::SECTION => self::SEC_TWEAKS)),
        self::PREF_JOB_ACTIONS => array(
          self::LABEL => 'Job Action Menu',
          self::CAPTION =>
            'Custom entires for the [Job Actions] menu. A JSON array of '.
            '[{"name": "Foo", "url": "https://bar/{{job_id}}/view", '.
            '"type": "iframe or link"}, ...]',
          self::DEFAULT_VALUE => '[]',
          self::SECTION => self::SEC_TWEAKS,
          self::TYPE => self::TYPE_STR),
        self::PREF_DEFAULT_JOB_ID_REGEX => array(
          self::LABEL => 'Default job ID regex',
          self::CAPTION => 'Replaces pref "'.self::PREF_JOB_ID_REGEX.'" if '.
            'that is left blank. In this default, the magic string '.
            '%%%PHABRICATOR_USERNAME%%% is replaced by the current username.',
          self::DEFAULT_VALUE => '.*',
          self::SECTION => self::SEC_TWEAKS,
          self::TYPE => self::TYPE_STR)));
  }