2023-12-28 13:44:21 +05:30
|
|
|
import json
|
2023-12-28 19:15:07 +05:30
|
|
|
import time
|
2023-12-28 14:23:45 +05:30
|
|
|
import grpc
|
2023-12-17 19:19:56 +05:30
|
|
|
from pprint import pprint
|
|
|
|
from locust import FastHttpUser, between, task
|
|
|
|
|
2023-12-28 13:44:21 +05:30
|
|
|
from dcache_py import dcache_pb2 as dcache
|
|
|
|
from dcache_py.dcache_pb2 import RaftRequest
|
|
|
|
from dcache_py.dcache_pb2_grpc import DcacheServiceStub
|
|
|
|
|
|
|
|
# password = "fooobarasdfasdf"
|
|
|
|
# username = "realaravinth"
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# class Unprotected(FastHttpUser):
|
|
|
|
# # wait_time = between(5, 15)
|
|
|
|
# peers = [
|
|
|
|
# "http://localhost:9001",
|
|
|
|
# "http://localhost:9002",
|
|
|
|
# "http://localhost:9003",
|
|
|
|
# ]
|
|
|
|
# leader = "http://localhost:9001"
|
|
|
|
# host = leader
|
|
|
|
# captcha_id="locust"
|
|
|
|
#
|
|
|
|
# pipeline_vote = []
|
|
|
|
# for _ in range(0,1000):
|
|
|
|
# pipeline_vote.append({"AddVisitor": captcha_id})
|
|
|
|
#
|
|
|
|
## def on_start(self):
|
|
|
|
## resp = self.client.get(f"{self.leader}/metrics")
|
|
|
|
## data = resp.json()
|
|
|
|
## leader = data["Ok"]["membership_config"]["log_id"]["leader_id"]["node_id"]
|
|
|
|
## self.leader = self.peers[leader - 1]
|
|
|
|
## self.host = self.leader
|
|
|
|
## print(f"Leader: {self.host}")
|
|
|
|
## self.add_captcha(captcha_id="locust")
|
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# def write(self, data):
|
|
|
|
# resp = self.client.post(f"{self.host}/write", json=data)
|
2023-12-17 19:19:56 +05:30
|
|
|
# print(f"RPC Status: {resp.status_code}")
|
2023-12-28 13:44:21 +05:30
|
|
|
# resp = resp.json()
|
|
|
|
# if "Err" in resp:
|
|
|
|
# leader = resp["Err"]["APIError"]["ForwardToLeader"]["leader_node"]["addr"]
|
|
|
|
# print(f"Forwarding write to leader {leader}")
|
|
|
|
# return write(leader, data)
|
|
|
|
# return resp["Ok"]["data"]
|
|
|
|
#
|
|
|
|
# def pipeline_write(self, data):
|
|
|
|
# resp = self.client.post(f"{self.host}/pipeline/write", json=data)
|
|
|
|
## print(f"RPC Status: {resp.status_code}")
|
|
|
|
# resp = resp.json()
|
|
|
|
# if "Err" in resp:
|
|
|
|
# leader = resp["Err"]["APIError"]["ForwardToLeader"]["leader_node"]["addr"]
|
|
|
|
# print(f"Forwarding write to leader {leader}")
|
|
|
|
# return write(leader, data)
|
|
|
|
# return resp
|
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# def add_vote(self, captcha_id: str):
|
|
|
|
# resp = self.write(data={"AddVisitor": captcha_id})
|
|
|
|
# pprint(resp)
|
|
|
|
#
|
|
|
|
# def add_vote_pipeline(self, captcha_id: str):
|
|
|
|
# resp = self.pipeline_write(data=self.pipeline_vote)
|
|
|
|
## pprint(resp)
|
|
|
|
#
|
|
|
|
# def add_captcha(self, captcha_id: str):
|
|
|
|
# params = {
|
|
|
|
# "AddCaptcha": {
|
|
|
|
# "id": captcha_id,
|
|
|
|
# "mcaptcha": {
|
|
|
|
# "visitor_threshold": 0,
|
|
|
|
# "defense": {
|
|
|
|
# "levels": [
|
|
|
|
# {"visitor_threshold": 50, "difficulty_factor": 500},
|
|
|
|
# {"visitor_threshold": 5000, "difficulty_factor": 50000},
|
|
|
|
# ],
|
|
|
|
# "current_visitor_threshold": 0,
|
|
|
|
# },
|
|
|
|
# "duration": 30,
|
|
|
|
# },
|
|
|
|
# }
|
|
|
|
# }
|
|
|
|
# resp = self.write(data=params)
|
|
|
|
# pprint(f"Captcha added {captcha_id}: {resp}")
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# @task
|
|
|
|
# def unprotected(self):
|
|
|
|
# self.add_vote_pipeline(captcha_id=self.captcha_id)
|
|
|
|
# ##self.add_vote(captcha_id="locust")
|
|
|
|
## data = {
|
|
|
|
## "username": username,
|
|
|
|
## "password": username,
|
|
|
|
## "confirm_password": username,
|
|
|
|
## }
|
|
|
|
## self.client.post("/unprotected", data=data)
|
|
|
|
#
|
|
|
|
import gevent
|
|
|
|
import adaptor
|
|
|
|
from locust import events, task
|
|
|
|
|
2023-12-28 14:23:45 +05:30
|
|
|
host = "localhost:9001"
|
|
|
|
captcha_id = "locust"
|
|
|
|
|
|
|
|
|
|
|
|
def add_captcha(stub: DcacheServiceStub, captcha_id: str):
|
|
|
|
msg = dcache.AddCaptchaRequest(
|
|
|
|
id=captcha_id,
|
|
|
|
mcaptcha=dcache.MCaptcha(
|
|
|
|
duration=30,
|
|
|
|
defense=dcache.Defense(
|
|
|
|
levels=[
|
|
|
|
dcache.Level(visitor_threshold=50, difficulty_factor=500),
|
|
|
|
dcache.Level(visitor_threshold=5000, difficulty_factor=50000),
|
|
|
|
]
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
resp = stub.AddCaptcha(msg)
|
|
|
|
pprint(f"Captcha added {captcha_id}: {resp}")
|
|
|
|
|
|
|
|
|
|
|
|
with grpc.insecure_channel(host) as channel:
|
|
|
|
stub = DcacheServiceStub(channel)
|
|
|
|
add_captcha(stub=stub, captcha_id=captcha_id)
|
|
|
|
|
2023-12-28 13:44:21 +05:30
|
|
|
|
2023-12-28 19:15:07 +05:30
|
|
|
#pipeline_msgs = []
|
|
|
|
#for _ in range(0,1000):
|
|
|
|
# pipeline_msgs.append(dcache.DcacheRequest(addVisitor=dcache.CaptchaID(id=captcha_id)))
|
|
|
|
#pipeline_msgs = dcache.DcacheBatchRequest(requests=pipeline_msgs)
|
|
|
|
|
|
|
|
#def pipeline_generate_messages():
|
|
|
|
# for msg in pipeline_msgs:
|
|
|
|
# yield msg
|
|
|
|
|
|
|
|
|
|
|
|
#import threading
|
|
|
|
#threadLock = threading.Lock()
|
|
|
|
#global_counter = 0
|
|
|
|
|
|
|
|
def nothing(r):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
2023-12-28 13:44:21 +05:30
|
|
|
class HelloGrpcUser(adaptor.GrpcUser):
|
|
|
|
stub_class = DcacheServiceStub
|
2023-12-28 14:23:45 +05:30
|
|
|
host = host
|
|
|
|
captcha_id = captcha_id
|
2023-12-28 19:15:07 +05:30
|
|
|
msg = dcache.CaptchaID(id=captcha_id)
|
|
|
|
# pipeline_msgs = []
|
|
|
|
# for _ in range(0,10):
|
|
|
|
# pipeline_msgs.append(dcache.DcacheRequest(addVisitor=dcache.CaptchaID(id=captcha_id)))
|
|
|
|
# pipeline_msgs = dcache.DcacheBatchRequest(requests=pipeline_msgs)
|
|
|
|
|
|
|
|
|
|
|
|
# pipeline_vote = []
|
|
|
|
# for _ in range(0,1000):
|
|
|
|
# pipeline_vote.append(
|
|
|
|
# dcache.DcacheRequest(addVisitor=dcache.CaptchaID(id=captcha_id))
|
|
|
|
# )
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-17 19:19:56 +05:30
|
|
|
|
|
|
|
def add_vote(self, captcha_id: str):
|
2023-12-28 19:15:07 +05:30
|
|
|
resp = self.stub.AddVisitor(self.msg)
|
2023-12-17 19:19:56 +05:30
|
|
|
|
2023-12-28 19:15:07 +05:30
|
|
|
# def add_vote_pipeline(self):
|
|
|
|
# with threadLock:
|
|
|
|
# global global_counter
|
|
|
|
# global_counter += 1
|
|
|
|
# print(f"count: {global_counter}")
|
|
|
|
|
|
|
|
# res = self.stub.PipelineDcacheOps(pipeline_msgs)
|
|
|
|
# for r in res.responses:
|
|
|
|
# print(r.option_add_visitor_result.result.duration)
|
|
|
|
# resp = self.pipeline_write(data=self.pipeline_vote)
|
|
|
|
# #pprint(resp)
|
2023-12-17 19:19:56 +05:30
|
|
|
|
|
|
|
@task
|
2023-12-28 13:44:21 +05:30
|
|
|
def addVote(self):
|
|
|
|
self.add_vote(self.captcha_id)
|
|
|
|
|
2023-12-28 19:15:07 +05:30
|
|
|
# @task
|
|
|
|
# def addVotePipeline(self):
|
|
|
|
# self.add_vote_pipeline()
|
|
|
|
#self.add_vote(self.captcha_id)
|
|
|
|
#self.stub.PipelineDcacheOps(pipeline_generate_messages()):
|
|
|
|
|
2023-12-28 13:44:21 +05:30
|
|
|
|
|
|
|
# msg = dcache.CaptchaID(id=captcha_id)
|
|
|
|
# resp = self.stub.AddVisitor(msg)
|
|
|
|
# pprint(resp)
|