diff mbox

[2/2] python/sepolicy/sepolicy: optimise sepolicy gui loading

Message ID 1481296200-28904-2-git-send-email-vmojzis@redhat.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

Vit Mojzis Dec. 9, 2016, 3:10 p.m. UTC
Significantly speed up sepolicy gui loading by aggregating setools
queries.

Signed-off-by: Vit Mojzis <vmojzis@redhat.com>
---
 python/sepolicy/sepolicy/__init__.py | 17 +++++++++++++++++
 python/sepolicy/sepolicy/gui.py      |  5 +++--
 2 files changed, 20 insertions(+), 2 deletions(-)

Comments

Stephen Smalley Dec. 9, 2016, 5:21 p.m. UTC | #1
On 12/09/2016 10:10 AM, Vit Mojzis wrote:
> Significantly speed up sepolicy gui loading by aggregating setools
> queries.

Thanks, applied both.

> 
> Signed-off-by: Vit Mojzis <vmojzis@redhat.com>
> ---
>  python/sepolicy/sepolicy/__init__.py | 17 +++++++++++++++++
>  python/sepolicy/sepolicy/gui.py      |  5 +++--
>  2 files changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
> index fee6438..22c72b2 100644
> --- a/python/sepolicy/sepolicy/__init__.py
> +++ b/python/sepolicy/sepolicy/__init__.py
> @@ -663,6 +663,23 @@ def get_init_entrypoint(transtype):
>  
>      return entrypoints
>  
> +def get_init_entrypoints_str():
> +    q = setools.TERuleQuery(_pol,
> +                            ruletype=["type_transition"],
> +                            source="init_t",
> +                            tclass=["process"])
> +    entrypoints = {}
> +    for i in q.results():
> +        try:
> +            transtype = str(i.default)
> +            if transtype in entrypoints:
> +                entrypoints[transtype].append(str(i.target))
> +            else:
> +                entrypoints[transtype] = [str(i.target)]
> +        except AttributeError:
> +            continue
> +
> +    return entrypoints
>  
>  def get_init_entrypoint_target(entrypoint):
>      try:
> diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py
> index 115e18b..c9dd4c1 100644
> --- a/python/sepolicy/sepolicy/gui.py
> +++ b/python/sepolicy/sepolicy/gui.py
> @@ -499,6 +499,8 @@ class SELinuxGui():
>  
>          loading_gui.show()
>          length = len(self.all_domains)
> +
> +        entrypoint_dict = sepolicy.get_init_entrypoints_str()
>          for domain in self.all_domains:
>              # After the user selects a path in the drop down menu call
>              # get_init_entrypoint_target(entrypoint) to get the transtype
> @@ -509,8 +511,7 @@ class SELinuxGui():
>              self.progress_bar.set_pulse_step(self.percentage)
>              self.idle_func()
>  
> -            entrypoints = [str(x) for x in sepolicy.get_init_entrypoint(domain)]
> -            for entrypoint in entrypoints:
> +            for entrypoint in entrypoint_dict.get(domain, []):
>                  path = sepolicy.find_entrypoint_path(entrypoint)
>                  if path:
>                      self.combo_box_add(path, domain)
>
diff mbox

Patch

diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
index fee6438..22c72b2 100644
--- a/python/sepolicy/sepolicy/__init__.py
+++ b/python/sepolicy/sepolicy/__init__.py
@@ -663,6 +663,23 @@  def get_init_entrypoint(transtype):
 
     return entrypoints
 
+def get_init_entrypoints_str():
+    q = setools.TERuleQuery(_pol,
+                            ruletype=["type_transition"],
+                            source="init_t",
+                            tclass=["process"])
+    entrypoints = {}
+    for i in q.results():
+        try:
+            transtype = str(i.default)
+            if transtype in entrypoints:
+                entrypoints[transtype].append(str(i.target))
+            else:
+                entrypoints[transtype] = [str(i.target)]
+        except AttributeError:
+            continue
+
+    return entrypoints
 
 def get_init_entrypoint_target(entrypoint):
     try:
diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py
index 115e18b..c9dd4c1 100644
--- a/python/sepolicy/sepolicy/gui.py
+++ b/python/sepolicy/sepolicy/gui.py
@@ -499,6 +499,8 @@  class SELinuxGui():
 
         loading_gui.show()
         length = len(self.all_domains)
+
+        entrypoint_dict = sepolicy.get_init_entrypoints_str()
         for domain in self.all_domains:
             # After the user selects a path in the drop down menu call
             # get_init_entrypoint_target(entrypoint) to get the transtype
@@ -509,8 +511,7 @@  class SELinuxGui():
             self.progress_bar.set_pulse_step(self.percentage)
             self.idle_func()
 
-            entrypoints = [str(x) for x in sepolicy.get_init_entrypoint(domain)]
-            for entrypoint in entrypoints:
+            for entrypoint in entrypoint_dict.get(domain, []):
                 path = sepolicy.find_entrypoint_path(entrypoint)
                 if path:
                     self.combo_box_add(path, domain)