public static function filter($route, $params, $request) { Rest_Config::product_id($params['product']); $version = strtoupper($params['version']); $resource = str_replace(' ', '_', ucwords(trim(str_replace(array('/', '_'), ' ', strtolower($params['resource']))))); $params['controller'] = 'Resources_' . $version . '_' . $resource; $params['action'] = strtolower($request->method()); $methods = get_class_methods('Controller_' . $params['controller']); if (empty($methods)) { throw Rest_Exception::factory(404, 'resource_not_found'); } return $params; }
public static function file($name, $extension = Rest_Config::FILE_EXT) { $product = Rest_Config::product_id(); $file = REST_PRODUCT_CONFIG_DIR; if (!empty($product)) { $file .= DIRECTORY_SEPARATOR . $product; } $file .= DIRECTORY_SEPARATOR . $name . $extension; if (!is_file($file)) { throw new Kohana_Exception('Configuration `:config` not found.', array(':config' => $file)); } $config = json_decode(file_get_contents($file), true); if (false === $config || null === $config) { throw new Kohana_Exception('Configuration `:config` is empty.', array(':config' => $file)); } return $config; }
protected static function do_make_delta($src_app, $dst_app) { Rest_Log::trace("生成增量包"); Rest_Log::trace("包1{$src_app['name']},内部号{$src_app['inner_version']}"); Rest_Log::trace("包2{$dst_app['name']},内部号{$dst_app['inner_version']}"); // 判断是否生成了增量包 $delta_app = Model_AppDelta::instance()->get_info_by_condition(['from_app_id' => $src_app['id'], 'to_app_id' => $dst_app['id']]); if (!empty($delta_app)) { $need_gen = false; $delta_resolvepath = Service_File::get_filepath_by_fkey($delta_app['fkey'], $delta_app['name'], Service_File::DST_APP); if (file_exists($delta_resolvepath)) { Rest_Log::trace("增量包{$delta_app['name']}已存在,无需生成了"); return; } } else { $need_gen = true; $delta_fkey = Helper_Api::generate_key(true); $delta_ext = Service_File::get_file_ext($src_app['name']); $delta_filename = "{$src_app['version']}_{$dst_app['version']}_delta.{$delta_ext}"; // v1_v2_delta.apk $delta_resolvepath = Service_File::get_dir_by_fkey($delta_fkey, Service_File::DST_APP) . '/' . $delta_fkey . '.' . $delta_ext; } Rest_Log::trace("增量包{$delta_app['name']}生成中..."); // 包的绝对路径 $src_resolvepath = Service_File::get_filepath_by_fkey($src_app['version_key'], $src_app['name'], Service_File::DST_APP); $dst_resolvepath = Service_File::get_filepath_by_fkey($dst_app['version_key'], $dst_app['name'], Service_File::DST_APP); Rest_Log::trace("包1的绝对路径:{$src_resolvepath}"); Rest_Log::trace("包2的绝对路径:{$dst_resolvepath}"); Rest_Log::trace("增量包的绝对路径:{$delta_resolvepath}"); // 获取到包后,遍历,生成增量包 $app_delta_config = Rest_Config::get('appdelta'); $cmd = "{$app_delta_config['python_bin']} {$app_delta_config['make_delta']} -f \"{$src_resolvepath}\" -s \"{$dst_resolvepath}\" -o \"{$delta_resolvepath}\""; Rest_Log::trace("执行的命令为:{$cmd}"); Rest_Log::trace('开始生成增量包' . time()); exec($cmd); Rest_Log::trace('结束生成增量包' . time()); // 创建记录 if ($need_gen) { Rest_Log::trace('生成增量包记录'); $props = ['from_app_id' => $src_app['id'], 'to_app_id' => $dst_app['id'], 'md5' => md5_file($delta_resolvepath), 'size' => filesize($delta_resolvepath), 'fkey' => $delta_fkey, 'name' => $delta_filename, 'mime' => $src_app['mime'], 'create_time' => time()]; $delta_id = Model_AppDelta::instance()->gen_one($props); } else { $delta_id = $delta_app['id']; } return $delta_id; }
public static function to_href($rel, $route_name, $parameters = array(), $query = array(), $method = Controller_Resources::METHOD_GET) { $product = Rest_Config::product_id(); $parameters = array_merge(array('product' => $product), $parameters); return array('rel' => strtolower($rel), 'href' => rtrim(URL::base(true), '/') . URL::href($route_name, $parameters) . (!empty($query) ? '?' . http_build_query($query) : ''), 'method' => $method); }