127 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			127 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/env php
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * StatusNet - the distributed open-source microblogging tool
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2009, StatusNet, Inc.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This program 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.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This program 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 this program.     If not, see <http://www.gnu.org/licenses/>.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$longoptions = array('base=', 'network');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$helptext = <<<END_OF_TRIM_HELP
							 | 
						||
| 
								 | 
							
								Generates sphinx.conf file based on StatusNet configuration.
							 | 
						||
| 
								 | 
							
								    --base               Base dir to Sphinx install
							 | 
						||
| 
								 | 
							
								                         (default /usr/local)
							 | 
						||
| 
								 | 
							
								    --network            Use status_network global config table
							 | 
						||
| 
								 | 
							
								                         (non-functional at present)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								END_OF_TRIM_HELP;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								require_once INSTALLDIR . '/scripts/commandline.inc';
							 | 
						||
| 
								 | 
							
								require dirname(__FILE__) . '/sphinx-utils.php';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$timestamp = date('r');
							 | 
						||
| 
								 | 
							
								print <<<END
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Sphinx configuration for StatusNet
							 | 
						||
| 
								 | 
							
								# Generated {$timestamp}
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								END;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sphinx_iterate_sites('sphinx_site_template');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								print <<<END
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								indexer
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    mem_limit               = 300M
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								searchd
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    port                    = 3312
							 | 
						||
| 
								 | 
							
								    log                     = {$base}/log/searchd.log
							 | 
						||
| 
								 | 
							
								    query_log               = {$base}/log/query.log
							 | 
						||
| 
								 | 
							
								    read_timeout            = 5
							 | 
						||
| 
								 | 
							
								    max_children            = 30
							 | 
						||
| 
								 | 
							
								    pid_file                = {$base}/log/searchd.pid
							 | 
						||
| 
								 | 
							
								    max_matches             = 1000
							 | 
						||
| 
								 | 
							
								    seamless_rotate         = 1
							 | 
						||
| 
								 | 
							
								    preopen_indexes         = 0
							 | 
						||
| 
								 | 
							
								    unlink_old              = 1
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								END;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Build config entries for a single site
							 | 
						||
| 
								 | 
							
								 * @fixme we only seem to have master DB currently available...
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								function sphinx_site_template($sn)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return
							 | 
						||
| 
								 | 
							
								        sphinx_template($sn,
							 | 
						||
| 
								 | 
							
								            'profile',
							 | 
						||
| 
								 | 
							
								            'SELECT id, UNIX_TIMESTAMP(created) as created_ts, nickname, fullname, location, bio, homepage FROM profile',
							 | 
						||
| 
								 | 
							
								            'SELECT * FROM profile where id = $id') .
							 | 
						||
| 
								 | 
							
								        sphinx_template($sn,
							 | 
						||
| 
								 | 
							
								            'notice',
							 | 
						||
| 
								 | 
							
								            'SELECT id, UNIX_TIMESTAMP(created) as created_ts, content FROM notice',
							 | 
						||
| 
								 | 
							
								            'SELECT * FROM notice where notice.id = $id AND notice.is_local != -2');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function sphinx_template($sn, $table, $query, $query_info)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    $base = sphinx_base();
							 | 
						||
| 
								 | 
							
								    $dbtype = common_config('db', 'type');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    print <<<END
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# {$sn->sitename}
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								source {$sn->dbname}_src_{$table}
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    type                    = {$dbtype}
							 | 
						||
| 
								 | 
							
								    sql_host                = {$sn->dbhost}
							 | 
						||
| 
								 | 
							
								    sql_user                = {$sn->dbuser}
							 | 
						||
| 
								 | 
							
								    sql_pass                = {$sn->dbpass}
							 | 
						||
| 
								 | 
							
								    sql_db                  = {$sn->dbname}
							 | 
						||
| 
								 | 
							
								    sql_query_pre           = SET NAMES utf8;
							 | 
						||
| 
								 | 
							
								    sql_query               = {$query}
							 | 
						||
| 
								 | 
							
								    sql_query_info          = {$query_info}
							 | 
						||
| 
								 | 
							
								    sql_attr_timestamp      = created_ts
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								index {$sn->dbname}_{$table}
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    source                  = {$sn->dbname}_src_{$table}
							 | 
						||
| 
								 | 
							
								    path                    = {$base}/data/{$sn->dbname}_{$table}
							 | 
						||
| 
								 | 
							
								    docinfo                 = extern
							 | 
						||
| 
								 | 
							
								    charset_type            = utf-8
							 | 
						||
| 
								 | 
							
								    min_word_len            = 3
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								END;
							 | 
						||
| 
								 | 
							
								}
							 |