optimisation getissue gitea
This commit is contained in:
parent
a2d1841631
commit
8bc58f6966
|
@ -433,7 +433,6 @@ class ScrumController extends AbstractController
|
|||
]);
|
||||
}
|
||||
|
||||
|
||||
public function table($id, Request $request)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
|
|
@ -85,7 +85,7 @@ class ScrumissueController extends AbstractController
|
|||
// Récupérer l'issue modifiée pour mettre à jour la date de modification gitea
|
||||
$giteaissue=$this->giteaservice->getIssue($scrumissue->getScrum()->getGiteajson()["owner"]["login"],$scrumissue->getScrum()->getGiteajson()["name"],$scrumissue->getGiteanumber());
|
||||
if(!$giteaissue) return new JsonResponse(['message' => 'No API getIssue'], 403);
|
||||
$updateissue=new \DateTime($giteaissue->updated_at);
|
||||
$updateissue=new \DateTime(json_decode(json_encode($giteaissue), true)["updated_at"]);
|
||||
$updateissue->setTimezone(new \DateTimeZone("UTC"));
|
||||
|
||||
$lastupdate=$scrumissue->getScrum()->getUpdatedate();
|
||||
|
|
|
@ -13,13 +13,32 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
{
|
||||
private $session;
|
||||
private $firstcolumn;
|
||||
private $datescrumupdate;
|
||||
private $totalTime;
|
||||
private $startTime;
|
||||
private $showTime;
|
||||
|
||||
public function __construct(ManagerRegistry $registry,giteaService $giteaservice,SessionInterface $session)
|
||||
{
|
||||
parent::__construct($registry, Scrum::class);
|
||||
$this->giteaservice = $giteaservice;
|
||||
$this->session = $session;
|
||||
$this->showTime = false;
|
||||
}
|
||||
|
||||
private function showtime($istart,$title="") {
|
||||
if($this->showTime) {
|
||||
if($istart) {
|
||||
$this->totalTime = microtime(true);
|
||||
$this->startTime = microtime(true);
|
||||
}
|
||||
else {
|
||||
$endTime = microtime(true);
|
||||
$executionTime = $endTime - $this->startTime;
|
||||
$totalTime = $endTime - $this->totalTime;
|
||||
dump($executionTime." / ".$totalTime." = ".$title);
|
||||
$this->startTime = microtime(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function findByUser($user) {
|
||||
|
@ -40,17 +59,30 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
|
||||
|
||||
public function getGitea($scrum,&$giteaassignees,&$giteacolumns,&$giteamilestones,&$giteateams,&$giteaprioritys,&$giteatypes,&$gitealabels, $forcereload=false) {
|
||||
$this->showtime(true);
|
||||
$lastupdate = $scrum->getUpdatedate();
|
||||
if(!$lastupdate) $lastupdate = new \DateTime(("19000101"));
|
||||
$lastupdate->sub(new \DateInterval('PT30M'));
|
||||
|
||||
$viewclosed = $this->session->get("viewclosed");
|
||||
|
||||
// Récupérer les labels de gitea
|
||||
$gitealabels=$this->giteaservice->getLabels($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"]);
|
||||
if(!is_array($gitealabels)) die("Probleme de connexion avec gitea veuillez vous <a href='/logout'>reconnecter</a>");
|
||||
$giteaidlabels=array_column($gitealabels, 'id');
|
||||
|
||||
// Récupérer les jalons de gitea
|
||||
$giteamilestones=$this->giteaservice->getMilestones($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"]);
|
||||
if(!is_array($giteamilestones)) die("Probleme de connexion avec gitea veuillez vous <a href='/logout'>reconnecter</a>");
|
||||
$giteaidmilestones=array_column($giteamilestones, 'id');
|
||||
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"Récupération gitealabels & giteamilestones");
|
||||
|
||||
// S'assurer que nos colonnes existes toujours
|
||||
$scrumcolumns=$scrum->getScrumcolumns();
|
||||
foreach($scrumcolumns as $scrumcolumn) {
|
||||
$gitealabel=$this->giteaservice->getLabel($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],$scrumcolumn->getGiteaid());
|
||||
if(!$gitealabel) {
|
||||
if(!in_array($scrumcolumn->getGiteaid(),$giteaidlabels)) {
|
||||
$this->_em->remove($scrumcolumn);
|
||||
$this->_em->flush();
|
||||
}
|
||||
|
@ -59,8 +91,7 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
// S'assurer que nos teams existes toujours
|
||||
$scrumteams=$scrum->getScrumteams();
|
||||
foreach($scrumteams as $scrumteam) {
|
||||
$gitealabel=$this->giteaservice->getLabel($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],$scrumteam->getGiteaid());
|
||||
if(!$gitealabel) {
|
||||
if(!in_array($scrumteam->getGiteaid(),$giteaidlabels)) {
|
||||
$this->_em->remove($scrumteam);
|
||||
$this->_em->flush();
|
||||
}
|
||||
|
@ -69,8 +100,7 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
// S'assurer que nos prioritys existes toujours
|
||||
$scrumprioritys=$scrum->getScrumprioritys();
|
||||
foreach($scrumprioritys as $scrumpriority) {
|
||||
$gitealabel=$this->giteaservice->getLabel($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],$scrumpriority->getGiteaid());
|
||||
if(!$gitealabel) {
|
||||
if(!in_array($scrumpriority->getGiteaid(),$giteaidlabels)) {
|
||||
$this->_em->remove($scrumpriority);
|
||||
$this->_em->flush();
|
||||
}
|
||||
|
@ -79,23 +109,27 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
// S'assurer que nos types existes toujours
|
||||
$scrumtypes=$scrum->getScrumtypes();
|
||||
foreach($scrumtypes as $scrumtype) {
|
||||
$gitealabel=$this->giteaservice->getLabel($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],$scrumtype->getGiteaid());
|
||||
if(!$gitealabel) {
|
||||
if(!in_array($scrumtype->getGiteaid(),$giteaidlabels)) {
|
||||
$this->_em->remove($scrumtype);
|
||||
$this->_em->flush();
|
||||
}
|
||||
}
|
||||
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"S'assurer que nos labels colonnes teams prioritys types existes toujours");
|
||||
|
||||
// S'assurer que nos sprint sont toujours lié à un jalon existant
|
||||
$scrumsprints=$scrum->getScrumsprints();
|
||||
foreach($scrumsprints as $scrumsprint) {
|
||||
$giteamilestone=$this->giteaservice->getMilestone($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],$scrumsprint->getGiteamilestone());
|
||||
if(!$giteamilestone) {
|
||||
if(!in_array($scrumsprint->getGiteamilestone(),$giteaidmilestones)) {
|
||||
$this->_em->remove($scrumsprint);
|
||||
$this->_em->flush();
|
||||
}
|
||||
}
|
||||
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"S'assurer que nos sprint sont toujours lié à un jalon existant");
|
||||
|
||||
// Récupérer le dernier order
|
||||
$last = $this->_em->getRepository('App:Scrumissue')->findOneBy(["scrum"=>$scrum], ['rowid' => 'DESC']);
|
||||
if(!$last) $lastrowid=-1;
|
||||
|
@ -139,51 +173,40 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
else
|
||||
$giteaassignees=[];
|
||||
|
||||
$giteacollaborators=$this->giteaservice->getOrgateams($scrum->getGiteajson()["owner"]["login"]);
|
||||
if($giteacollaborators&&is_array($giteacollaborators)) {
|
||||
foreach($giteacollaborators as $team) {
|
||||
$giteamembers=$this->giteaservice->getTeammembers($team->id);
|
||||
if($giteamembers&&is_array($giteamembers)) {
|
||||
foreach($giteamembers as $giteamember) {
|
||||
if(!in_array($giteamember,$giteaassignees))
|
||||
array_push($giteaassignees,$giteamember);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$giteacollaborators=$this->giteaservice->getCollaborators($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"]);
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"Récupérer info ninegitea");
|
||||
|
||||
// Récupérer les intervenants
|
||||
$giteacollaborators=$this->giteaservice->getAssignees($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"]);
|
||||
if(!is_array($giteacollaborators)) die("Probleme de connexion avec gitea veuillez vous <a href='/logout'>reconnecter</a>");
|
||||
foreach($giteacollaborators as $giteacollaborator) {
|
||||
if(!in_array($giteacollaborator,$giteaassignees))
|
||||
array_push($giteaassignees,$giteacollaborator);
|
||||
}
|
||||
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"Récupérer les intervenants");
|
||||
|
||||
// Récupérer les milestones de gitea
|
||||
$giteamilestones=$this->giteaservice->getMilestones($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],"?state=".($viewclosed=="true"?"all":"open"));
|
||||
if(!is_array($giteamilestones)) die("Probleme de connexion avec gitea veuillez vous <a href='/logout'>reconnecter</a>");
|
||||
$keysort = array_column($giteamilestones, 'title');
|
||||
array_multisort($keysort, SORT_DESC, $giteamilestones);
|
||||
|
||||
// Récupérer les labels de gitea
|
||||
$gitealabels=$this->giteaservice->getLabels($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"]);
|
||||
|
||||
// Formatter les labels non colomn/team/priority/type
|
||||
/*
|
||||
foreach($gitealabels as $key => $gitealabel) {
|
||||
if(in_array($gitealabel->id,$giteacolumns)||in_array($gitealabel->id,$giteateams)||in_array($gitealabel->id,$giteaprioritys)||in_array($gitealabel->id,$giteatypes))
|
||||
unset($gitealabels[$key]);
|
||||
}
|
||||
*/
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"Récupérer les milestones");
|
||||
|
||||
// Récupérer les issues de gitea
|
||||
$giteaissues=$this->giteaservice->getIssues($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],"?state=".($viewclosed=="true"?"all":"open"));
|
||||
$giteaissues=$this->giteaservice->getIssues($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],"?state=all".(!$forcereload?"&since=".urlencode($lastupdate->format(\DateTime::RFC3339_EXTENDED)):""));
|
||||
if(!is_array($giteaissues)) die("Probleme de connexion avec gitea veuillez vous <a href='/logout'>reconnecter</a>");
|
||||
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"Récupérer les issues");
|
||||
|
||||
// Génération des issues
|
||||
$tbgiteaissues=[];
|
||||
$fgscrumupdate=false;
|
||||
$this->datescrumupdate=new \DateTime("01/01/1900");
|
||||
$this->datescrumupdate->setTimezone(new \DateTimeZone("UTC"));
|
||||
$updatedates=[];
|
||||
|
||||
foreach($giteaissues as $giteaissue) {
|
||||
|
||||
|
@ -215,11 +238,13 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
if($fgissueupdated) {
|
||||
$updateissue=new \DateTime(json_decode(json_encode($giteaissue), true)["updated_at"]);
|
||||
$updateissue->setTimezone(new \DateTimeZone("UTC"));
|
||||
array_push($updatedates,$updateissue);
|
||||
|
||||
$closeissue=new \DateTime(json_decode(json_encode($giteaissue), true)["closed_at"]);
|
||||
$closeissue->setTimezone(new \DateTimeZone("UTC"));
|
||||
|
||||
$this->datescrumupdate=max($this->datescrumupdate,$updateissue,$closeissue);
|
||||
if($giteaissue->closed_at) {
|
||||
$closeissue=new \DateTime(json_decode(json_encode($giteaissue), true)["closed_at"]);
|
||||
$closeissue->setTimezone(new \DateTimeZone("UTC"));
|
||||
array_push($updatedates,$closeissue);
|
||||
}
|
||||
|
||||
$fgscrumupdate=true;
|
||||
$this->majissue($scrumissue,$giteaissue,false);
|
||||
|
@ -228,30 +253,28 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
array_push($tbgiteaissues,$giteaissue->number);
|
||||
}
|
||||
|
||||
// Placer à closed l'ensemble des issues vu comme open mais qui ne le sont plus
|
||||
if($viewclosed=="false") {
|
||||
$scrumissues=$scrum->getScrumissues();
|
||||
foreach($scrumissues as $scrumissue) {
|
||||
if($scrumissue->getGiteastate()=="open"&&!in_array($scrumissue->getGiteanumber(),$tbgiteaissues)) {
|
||||
$giteaissue=$this->giteaservice->getIssue($scrum->getGiteajson()["owner"]["login"],$scrum->getGiteajson()["name"],$scrumissue->getGiteanumber());
|
||||
$fgscrumupdate=true;
|
||||
|
||||
// S'il ne trouve pas d'issue c'est qu'elle n'existe plus
|
||||
if(!$giteaissue) {
|
||||
// Faudrait supprimer mais pour l'instant pas touche
|
||||
//dump("netrouvepasissue alors");
|
||||
//dump($scrumissue->getGiteanumber());
|
||||
}
|
||||
// Sinon mise
|
||||
else $this->majissue($scrumissue,$giteaissue,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"Traiter les issues");
|
||||
|
||||
if($fgscrumupdate) {
|
||||
$scrum->setUpdatedate($this->datescrumupdate);
|
||||
$this->_em->persist($scrum);
|
||||
// Convertir les objets DateTime en timestamps
|
||||
$timestamps = array_map(function($date) {
|
||||
return $date->getTimestamp();
|
||||
}, $updatedates);
|
||||
|
||||
// Trouver le timestamp le plus récent
|
||||
$mostRecentTimestamp = max($timestamps);
|
||||
|
||||
// Créer une nouvelle instance de DateTime à partir du timestamp le plus récent
|
||||
$mostRecentDate = (new \DateTime())->setTimestamp($mostRecentTimestamp);
|
||||
|
||||
// Mettre à jour la date update du scrum
|
||||
$scrum->setUpdatedate($mostRecentDate);
|
||||
$this->_em->flush();
|
||||
|
||||
// Temps d'execution
|
||||
$this->showtime(false,"Mettre à jour le scrum");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -315,4 +338,18 @@ class ScrumRepository extends ServiceEntityRepository
|
|||
$this->_em->persist($scrumissue);
|
||||
$this->_em->flush();
|
||||
}
|
||||
|
||||
private function getMaxDate(\DateTime ...$dates): \DateTime {
|
||||
// Initialiser la date maximale avec la première date de la liste
|
||||
$maxDate = $dates[0];
|
||||
|
||||
// Comparer chaque date avec la date maximale actuelle
|
||||
foreach ($dates as $date) {
|
||||
if ($date > $maxDate) {
|
||||
$maxDate = $date;
|
||||
}
|
||||
}
|
||||
|
||||
return $maxDate;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -223,6 +223,13 @@ class giteaService
|
|||
else return $response->body;
|
||||
}
|
||||
|
||||
public function getassignees($owner,$name) {
|
||||
$apiurl = $this->url."/repos/$owner/$name/assignees";
|
||||
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
|
||||
if(!$response||$response->code!="200") return false;
|
||||
else return $response->body;
|
||||
}
|
||||
|
||||
public function getcollaborators($owner,$name) {
|
||||
$apiurl = $this->url."/repos/$owner/$name/collaborators";
|
||||
$response=$this->api("GET",$apiurl,null,$this->session->get("giteatoken"));
|
||||
|
@ -252,8 +259,7 @@ class giteaService
|
|||
}
|
||||
|
||||
public function getissues($owner,$name,$state="?state=open") {
|
||||
$apiurl = $this->url."/repos/$owner/$name/issues".$state."&type=issues";
|
||||
|
||||
$apiurl = $this->url."/repos/$owner/$name/issues".$state.($state==""?"?":"&")."type=issues";
|
||||
$page=1;
|
||||
$limit=20;
|
||||
$issues=[];
|
||||
|
|
Loading…
Reference in New Issue