Commit 49bb7864 authored by Michael Ngei's avatar Michael Ngei

Merge branch 'iprsv2_mike' into 'master'

Updates search quota plugin

See merge request !20
parents 49f4c19d 3ef2ec07
...@@ -30,72 +30,72 @@ class PaymentsAPI extends Controller ...@@ -30,72 +30,72 @@ class PaymentsAPI extends Controller
]); ]);
} }
// wOLD VERSION WITH NO TOKEN ADDED // wOLD VERSION WITH NO TOKEN ADDED
/* public function store(StoreContractAPIRequest $request) /* public function store(StoreContractAPIRequest $request)
{ {
try { try {
$validated = $request->validated(); $validated = $request->validated();
$contract= Contract::where('RID',$validated['contract_id'])->with('client')->first(); $contract= Contract::where('RID',$validated['contract_id'])->with('client')->first();
$consumer_name = str_replace( ' ', '_', strtoupper($contract->client->name_sh)); $consumer_name = str_replace( ' ', '_', strtoupper($contract->client->name_sh));
try {
$consumerKey = "search_quota:max:".$consumer_name;
$keyValue= null;
if($keyValue == null) {
//@TODO clean returned data api ContractCon
//$this->apiDetails = $this->apiContract($consumer_name, $validated['tokens'], $validated['contract_id']);
$api_res = $this->apiContractCon($consumer_name, $validated['tokens'], $validated['contract_id']);
if ($api_res['status'] === true) {
$data = $api_res['body'];
$data = json_decode($api_res['body'], true);
//$data = json_decode($api_res['body'], true);
$this->jsonData = $data;
//$this->jsonData = json_encode($data, JSON_PRETTY_PRINT);
//Redis::set($consumerKey, $validated['tokens']);
}else{
return response()->json([
'success' => false,
'message' => 'Failed to create payment',
'error' => "Error creating/updating consumer",
], 500);
}
}else{
//update
$value=$keyValue+$validated['tokens'];
//Redis::set($consumerKey, $value);
};
} catch (\Predis\Connection\ConnectionException $redisException) {
return response()->json([
'success' => false,
'message' => 'Failed to update search quota',
'error' => $redisException->getMessage(),
], 500);
}
// Attempt to insert the payment
$payment = Payments::create([
'PAYMENT_REF' => $validated['payment_ref'],
'PAYMENT_MODE' => $validated['payment_mode'],
'AMOUNT' => $validated['amount'],
'TOKENS' => $validated['tokens'],
'contract_id' => $validated['contract_id'],
'USER_ID' => $validated['user_id'],
]);
// Return success JSON response try {
return response()->json([ $consumerKey = "search_quota:max:".$consumer_name;
'success' => true, $keyValue= null;
'message' => 'Payment created successfully', if($keyValue == null) {
$this->jsonData, //@TODO clean returned data api ContractCon
], 201); //$this->apiDetails = $this->apiContract($consumer_name, $validated['tokens'], $validated['contract_id']);
$api_res = $this->apiContractCon($consumer_name, $validated['tokens'], $validated['contract_id']);
if ($api_res['status'] === true) {
$data = $api_res['body'];
$data = json_decode($api_res['body'], true);
//$data = json_decode($api_res['body'], true);
$this->jsonData = $data;
//$this->jsonData = json_encode($data, JSON_PRETTY_PRINT);
//Redis::set($consumerKey, $validated['tokens']);
}else{
return response()->json([
'success' => false,
'message' => 'Failed to create payment',
'error' => "Error creating/updating consumer",
], 500);
}
}else{
//update
$value=$keyValue+$validated['tokens'];
//Redis::set($consumerKey, $value);
};
} catch (\Predis\Connection\ConnectionException $redisException) {
return response()->json([
'success' => false,
'message' => 'Failed to update search quota',
'error' => $redisException->getMessage(),
], 500);
}
// Attempt to insert the payment
$payment = Payments::create([
'PAYMENT_REF' => $validated['payment_ref'],
'PAYMENT_MODE' => $validated['payment_mode'],
'AMOUNT' => $validated['amount'],
'TOKENS' => $validated['tokens'],
'contract_id' => $validated['contract_id'],
'USER_ID' => $validated['user_id'],
]);
} catch (\Exception $e) { // Return success JSON response
// Return failure JSON response return response()->json([
return response()->json([ 'success' => true,
'success' => false, 'message' => 'Payment created successfully',
'message' => 'Failed to create payment', $this->jsonData,
'error' => $e->getMessage(), ], 201);
], 500);
} } catch (\Exception $e) {
}*/ // Return failure JSON response
return response()->json([
'success' => false,
'message' => 'Failed to create payment',
'error' => $e->getMessage(),
], 500);
}
}*/
public function store(StoreContractAPIRequest $request) public function store(StoreContractAPIRequest $request)
{ {
...@@ -104,15 +104,18 @@ class PaymentsAPI extends Controller ...@@ -104,15 +104,18 @@ class PaymentsAPI extends Controller
$consumer_name = str_replace( ' ', '_', strtoupper($contract->client->name_sh)); $consumer_name = str_replace( ' ', '_', strtoupper($contract->client->name_sh));
//$res=Redis::set('name', 'mikee'); //$res=Redis::set('name', 'mikee');
//$checkKey = Redis::get('search_quota:countsse:user23'); //$checkKey = Redis::get('search_quota:countsse:user23');
try{ try{
if (Redis::exists("search_quota:max:".$consumer_name)) { if (Redis::exists("search_quota:max:".$consumer_name)) {
$tokens = $validated['tokens']; $tokens = $validated['tokens'];
$maxToken = Redis::get("search_quota:max:".$consumer_name); $maxToken = Redis::get("search_quota:max:".$consumer_name);
//$currentToken = Redis::get("search_quota:count:".$consumer_name);
// added tokens // added tokens
$newMax = $tokens + $maxToken; $newMax = $tokens + $maxToken;
//set tokens //set tokens
$tokenRes = Redis::set("search_quota:max:".$consumer_name, $newMax); $tokenRes = Redis::set("search_quota:max:".$consumer_name, $newMax);
// Attempt to insert the payment // Attempt to insert the payment
if($tokenRes){ if($tokenRes){
$payment = Payments::create([ $payment = Payments::create([
...@@ -132,7 +135,7 @@ class PaymentsAPI extends Controller ...@@ -132,7 +135,7 @@ class PaymentsAPI extends Controller
} }
}else{ }else{
//create new //create new
$this->apiContract($consumer_name, $validated['tokens'], $validated['contract_id']); $res = $this->apiContract($consumer_name, $validated['tokens'], $validated['contract_id']);
$payment = Payments::create([ $payment = Payments::create([
'PAYMENT_REF' => $validated['payment_ref'], 'PAYMENT_REF' => $validated['payment_ref'],
'PAYMENT_MODE' => $validated['payment_mode'], 'PAYMENT_MODE' => $validated['payment_mode'],
...@@ -177,21 +180,21 @@ class PaymentsAPI extends Controller ...@@ -177,21 +180,21 @@ class PaymentsAPI extends Controller
"exp" => 172800 "exp" => 172800
], ],
"limit-count" => [ "limit-count" => [
"count" => $tokens, "count" => $tokens,
"time_window"=> 30, "time_window"=> 30,
"rejected_code"=>503, "rejected_code"=>503,
"key"=> base64_encode($consumerName), "key"=> base64_encode($consumerName),
"policy"=> "redis", "policy"=> "redis",
"redis_host"=> "redis", "redis_host"=> "redis",
"redis_password"=> env('REDIS_PASSWORD'), "redis_password"=> env('REDIS_PASSWORD'),
"redis_port" => (int)env('REDIS_PORT'), "redis_port" => (int)env('REDIS_PORT'),
"redis_timeout" => 1000, "redis_timeout" => 1000,
"rejected_msg" =>"You have reached your token limit.", "rejected_msg" =>"You have reached your token limit.",
"show_limit_quota_header" => true "show_limit_quota_header" => true
] ]
] ]
]); ]);
// var_dump($response->status(), $response->headers(), $response->body()); // var_dump($response->status(), $response->headers(), $response->body());
//var_dump($response->successful()); //return true or false //var_dump($response->successful()); //return true or false
if ($response->successful()) { if ($response->successful()) {
//save it locally //save it locally
...@@ -224,8 +227,8 @@ class PaymentsAPI extends Controller ...@@ -224,8 +227,8 @@ class PaymentsAPI extends Controller
], ],
"search-quota-redis" => [ "search-quota-redis" => [
"redis_host" => 'redis', "redis_host" => 'redis',
"redis_port" => (int)env('REDIS_PORT'), "redis_port" => 6379,
"redis_password" => env('REDIS_PASSWORD'), "redis_password" => 'password',
"default_max_queries" => $tokens "default_max_queries" => $tokens
] ]
] ]
......
...@@ -3,8 +3,10 @@ ...@@ -3,8 +3,10 @@
namespace App\Http\Controllers\API; namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Contract;
use App\Models\Tokens; use App\Models\Tokens;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;
class TokensAPI extends Controller class TokensAPI extends Controller
{ {
...@@ -13,14 +15,37 @@ class TokensAPI extends Controller ...@@ -13,14 +15,37 @@ class TokensAPI extends Controller
* Get tokens give a contract ID * Get tokens give a contract ID
* *
* */ * */
public function show ($contract_id) public function show($contract_id)
{ {
// $token = Tokens::with('contract')->get(); //$token = Tokens::where('contract_id', $contract_id)->with('contract')->get();
$token = Tokens::where('contract_id', $contract_id)->with('contract')->get(); $consumer=Contract::where('rid',$contract_id)->with(['client:rid,name_sh,name_fl'])->select('rid','client_rid')->get();
$consumerName = $consumer[0]['client']['name_sh'];
$searchQuota = [];
$cursor = '0';
$pattern = 'search_quota:*:'.$consumerName;
//dd($pattern);
//dump("Keys from KEYS:", Redis::keys($pattern));
do {
$result = Redis::scan($cursor, 'MATCH', $pattern, 'COUNT', 10);
$cursor = $result[0]; // Update cursor for the next iteration
$keys = $result[1];
if (!empty($keys)) {
foreach ($keys as $key) {
$searchQuota[$key] = Redis::get($key);
}
}
} while ($cursor !== '0');
/*
* "search_quota:count:MIKELTD250" => "3"
"search_quota:max:MIKELTD250" => "6"
*/
// Return the data as a JSON response // Return the data as a JSON response
return response()->json([ return response()->json([
'status' => 'success', 'status' => 'success',
'data' => $token, 'data' => $searchQuota,
], 200); ], 200);
} }
} }
...@@ -15,7 +15,7 @@ class TokensController extends Controller ...@@ -15,7 +15,7 @@ class TokensController extends Controller
{ {
$searchQuotas = []; $searchQuotas = [];
$cursor = '0'; $cursor = '0';
$pattern = 'search_quota:count:*'; $pattern = 'search_quota:*';
//dump("Keys from KEYS:", Redis::keys($pattern)); //dump("Keys from KEYS:", Redis::keys($pattern));
do { do {
$result = Redis::scan($cursor, 'MATCH', $pattern, 'COUNT', 10); $result = Redis::scan($cursor, 'MATCH', $pattern, 'COUNT', 10);
...@@ -28,7 +28,9 @@ class TokensController extends Controller ...@@ -28,7 +28,9 @@ class TokensController extends Controller
} }
} }
} while ($cursor !== '0'); } while ($cursor !== '0');
dump("Keys from SCAN:", $searchQuotas);
dd($searchQuotas);
$tokens = Tokens::with('contract.client')->get(); $tokens = Tokens::with('contract.client')->get();
return view('tokens.tokens', [ return view('tokens.tokens', [
'tokens' => $tokens, 'tokens' => $tokens,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment