Re: [cas-user] Re: cas 7.0.0-RC9 - slow groovy ?

2023-12-13 Thread Ray Bon
artur,

Does it take a long time on each request or only the first?
If only the first, then you could trigger all the scripts after deployment 
(thought this is not ideal).
I am no groovy expert, but even a few seconds to compile the script is too long.

Ray

On Wed, 2023-12-13 at 02:55 -0800, artur miś wrote:
Notice: This message was sent from outside the University of Victoria email 
system. Please be cautious with links and sensitive information.


> Where does the additional metadata come from :

We  have  added it in groovy  staticly  for checking purposes .


> You could put a timer around each statement in the script to see which one(s) 
> takes a long time

Ray: 11ms but :


I have found out   that problem coming from groove just before executing script 
 :  2023-12-13 08:10:50,698 TRACE 
[org.apereo.cas.util.scripting.ScriptingUtils] - 
And this creation takes 5sec for very  basic script . Of course if you add 
somthing what  colecting  metadata this time rise up  to 10 sec.  This that 5 
sec is too much . We observed too thatfor dockerized cas  creating groovy 
object  instance for  basic script takes 10 sec but mor advanced scenario 15sec.

Startup without Contenetization
 ./gradlew clean build
./gradlew CopyCasConfiguration
 ./gradlew run

Start up with contenerization
docker start  etc/itd




how to reproduce this:

1) cas.properties

cas.authn.accept.enabled=true
cas.authn.accept.order=1
cas.authn.accept.users=test::test123
cas.authn.accept.name=Static Credentials
cas.authn.attribute-repository.groovy[0].location=file:/etc/cas/config/custom-attr.groovy
logging.level.org.apereo.cas=TRACE


2) /etc/cas/config/custom-attr.groovy

(default documentation script)

import java.util.*

def run(final Object... args) {
def (username,attributes,logger,properties,appContext) = args

def startTime = System.currentTimeMillis()

logger.debug("[{}]: The received uid is [{}]", this.class.simpleName, 
username)


def result = [username:[username], likes:["cheese", "food"], 
id:[1234,2,3,4,5], another:["attribute"]] < - aditional metadata comming from 
this script/line not from other  sophisticated resources  . In production we 
have other ldaps etc but not here, becouse we have discovered posibilile 
problems here so we simplified case  .

def stopTime = System.currentTimeMillis()
def executionTime = stopTime - startTime

logger.debug("Czas wykonania skryptu to: ${executionTime} ms")

return result

}




3) start cas and login as test/test123 few times

logs:

2023-12-13 08:10:50,698 TRACE [org.apereo.cas.util.scripting.ScriptingUtils] - 


commment: lag 9 seconds (creating groovy object)


2023-12-13 08:10:59,307 TRACE [org.apereo.cas.util.scripting.ScriptingUtils] - 


commment: script run in 11ms

2023-12-13 08:10:59,318 DEBUG 
[org.apereo.cas.authentication.principal.resolvers.InternalGroovyScriptDao] - 











wtorek, 12 grudnia 2023 o 19:12:55 UTC+1 Ray Bon napisał(a):
artur,

Where does the additional metadata come from?
That script looks very basic. You could put a timer around each statement in 
the script to see which one(s) takes a long time.

Ray

On Tue, 2023-12-12 at 02:19 -0800, artur miś wrote:
Notice: This message was sent from outside the University of Victoria email 
system. Please be cautious with links and sensitive information.

Buddys i atached some more information :





I have got problem with long execution time of basic groovy script:


cas.authn.attribute-repository.groovy[0].location=file:/etc/cas/config/custom-attr.groovy


import java.util.*

import java.text.SimpleDateFormat

import groovy.transform.Field

import javax.naming.directory.*

import java.util.Hashtable

import javax.naming.*


@Field File file = new File("/etc/cas/config/groovy_logs.txt")



def run(final Object... args) {

def (username,attributes,logger,properties,appContext) = args

logger.debug("[{}]: The received uid is [{}]", this.class.simpleName, username)


file.append "\n login: "+args[0]+" cas-id:"+args[1]['principal']+"\n"

file.append "\n version groove: "+GroovySystem.version+"\n"



// All attribute values must be defined as a collection wrapped in []

return [username:[username], likes:["6cheese", "7food"], id:[1234,2,3,4,5], 
another:["attribute"] ]



println GroovySystem.version

}




System CAS:


CAS Version: 7.0.0-RC9

CAS Branch: master

CAS Commit Id: xxx

CAS Build Date/Time: 2023-11-25T07:12:15.881468Z

Spring Boot Version: 3.2.0

Spring Version: 6.1.0

Java Home: /usr/lib/jvm/zulu21-ca-amd64

Java Vendor: Azul Systems, Inc.

Java Version: 21.0.1

Servlet Version: 6.0.0

JVM Free Memory: 345 MB

JVM Maximum Memory: 4 GB

JVM Total Memory: 512 MB

OS Architecture: amd64

OS Name: Linux

OS Version: 5.4.0-167-generic

OS Date/Time: 2023-12-12T10:35:50.786113719

OS Temp Directory: /tmp




Logs:


2023-12-12 10:41:41,731 DEBUG 
[org.apereo.cas.authentication.attribute.PrincipalAttributeRepositoryFetcher] - 



no activity in the log (just wa

Re: [cas-user] Re: cas 7.0.0-RC9 - slow groovy ?

2023-12-13 Thread artur miś

> Where does the additional metadata come from :

We  have  added it in groovy  staticly  for checking purposes .


> You could put a timer around each statement in the script to see which 
one(s) takes a long time 

Ray: 11ms but :


I have found out   that problem coming from groove just before executing 
script  :  
2023-12-13 08:10:50,698 TRACE [org.apereo.cas.util.scripting.ScriptingUtils] - 
 
And this creation takes 5sec for very  basic script . Of course if you add 
somthing what  colecting  metadata this time rise up  to 10 sec.  This that 
5 sec is too much . We observed too thatfor dockerized cas  creating 
groovy object  instance for  basic script takes 10 sec but mor advanced 
scenario 15sec.

Startup without Contenetization
 ./gradlew clean build
./gradlew CopyCasConfiguration
 ./gradlew run

Start up with contenerization
docker start  etc/itd




how to reproduce this:

1) cas.properties

cas.authn.accept.enabled=true
cas.authn.accept.order=1
cas.authn.accept.users=test::test123
cas.authn.accept.name=Static Credentials
cas.authn.attribute-repository.groovy[0].location=file:/etc/cas/config/custom-attr.groovy
logging.level.org.apereo.cas=TRACE


2) /etc/cas/config/custom-attr.groovy

(default documentation script)

import java.util.*

def run(final Object... args) {
def (username,attributes,logger,properties,appContext) = args

def startTime = System.currentTimeMillis() 

logger.debug("[{}]: The received uid is [{}]", this.class.simpleName, 
username)

 
def result = [username:[username], likes:["cheese", "food"], 
id:[1234,2,3,4,5], another:["attribute"]] < - aditional metadata comming 
from this script/line not from other  sophisticated resources  . In 
production we have other ldaps etc but not here, becouse we have discovered 
posibilile problems here so we simplified case  . 

def stopTime = System.currentTimeMillis()
def executionTime = stopTime - startTime 

logger.debug("Czas wykonania skryptu to: ${executionTime} ms")

return result

}




3) start cas and login as test/test123 few times 

logs:

2023-12-13 08:10:50,698 TRACE [org.apereo.cas.util.scripting.ScriptingUtils] - 


commment: lag 9 seconds (creating groovy object)


2023-12-13 08:10:59,307 TRACE [org.apereo.cas.util.scripting.ScriptingUtils] - 


commment: script run in 11ms 

2023-12-13 08:10:59,318 DEBUG 
[org.apereo.cas.authentication.principal.resolvers.InternalGroovyScriptDao] - 
 










wtorek, 12 grudnia 2023 o 19:12:55 UTC+1 Ray Bon napisał(a):

> artur,
>
> Where does the additional metadata come from?
> That script looks very basic. You could put a timer around each statement 
> in the script to see which one(s) takes a long time.
>
> Ray
>
> On Tue, 2023-12-12 at 02:19 -0800, artur miś wrote:
>
> Notice: This message was sent from outside the University of Victoria 
> email system. Please be cautious with links and sensitive information.
>
>
> Buddys i atached some more information :
>
>
>
>
> I have got problem with long execution time of basic groovy script:
>
>
>
> cas.authn.attribute-repository.groovy[0].location=file:/etc/cas/config/custom-attr.groovy
>
>
> import java.util.*
>
> import java.text.SimpleDateFormat
>
> import groovy.transform.Field
>
> import javax.naming.directory.*
>
> import java.util.Hashtable
>
> import javax.naming.*
>
>
> @Field File file = new File("/etc/cas/config/groovy_logs.txt")
>
>
>
> def run(final Object... args) {
>
> def (username,attributes,logger,properties,appContext) = args
>
> logger.debug("[{}]: The received uid is [{}]", this.class.simpleName, 
> username)
>
>
> file.append "\n login: "+args[0]+" cas-id:"+args[1]['principal']+"\n"
>
> file.append "\n version groove: "+GroovySystem.version+"\n"
>
>
>
> // All attribute values must be defined as a collection wrapped in []
>
> return [username:[username], likes:["6cheese", "7food"], 
> id:[1234,2,3,4,5], another:["attribute"] ]
>
>
>
> println GroovySystem.version
>
> }
>
>
>
>
> System CAS:
>
>
> CAS Version: 7.0.0-RC9
>
> CAS Branch: master
>
> CAS Commit Id: xxx
>
> CAS Build Date/Time: 2023-11-25T07:12:15.881468Z
>
> Spring Boot Version: 3.2.0
>
> Spring Version: 6.1.0
>
> Java Home: /usr/lib/jvm/zulu21-ca-amd64
>
> Java Vendor: Azul Systems, Inc.
>
> Java Version: 21.0.1
>
> Servlet Version: 6.0.0
>
> JVM Free Memory: 345 MB
>
> JVM Maximum Memory: 4 GB
>
> JVM Total Memory: 512 MB
>
> OS Architecture: amd64
>
> OS Name: Linux
>
> OS Version: 5.4.0-167-generic
>
> OS Date/Time: 2023-12-12T10:35:50.786113719
>
> OS Temp Directory: /tmp
>
>
>
>
> Logs:
>
>
> 2023-12-12 10:41:41,731 DEBUG 
> [org.apereo.cas.authentication.attribute.PrincipalAttributeRepositoryFetcher] 
> - 
>
>
> no activity in the log (just waiting ) 
>
>
>
> 2023-12-12 10:41:55,497 DEBUG 
> [org.apereo.cas.authentication.principal.resolvers.InternalGroovyScriptDao] 
> - <[custom-attr]: The received uid is [christmas_banny]>
>
>
> 2023-12-12 10:41:55,497 DEBUG 
> [org.apereo.cas.authentication.principal.r