De l’avantage des SSII ou ESN

Bulles

Drôle de titre, me direz-vous ! J’ai entendu de tout sur les SSII, du terme « vendeurs de viande » ou « le produit c’est toi », « ils ne pensent qu’à leurs commissions »… C’est pas toujours très rose. Essayons maintenant de dépeindre un tableau tout autre, un tableau où c’est le consultant, le maître du jeu, le maître de son avenir.

Commençons par le commencement. Le parcours normal après un diplôme BAC +5 et idéal d’après la majorité est de se faire embaucher directement chez un client final, on entend des « waou, t’as de la chance, mais comment t’as fait ? ». Et le deuxième type de parcours est de passer par une SSII, de commencer par une SSII comme on dit. Sauf que pour certains, ce passage dure longtemps, très longtemps. J’ai même rencontré quelques personnes qui ont fait toute leur carrière dans une SSII. Et j’en reste admirative, je vous explique pourquoi.

Au début quand vous êtes pris en charge dans une SSII, vous êtes très souvent encadrés, coachés, suivis, ensuite cela diffère. C’est différent selon les SSII mais aussi suivant la personnalité du consultant. Je m’explique.
– Une personne qui reste dans sa zone de confort, par exemple, aura tendance à accepter des missions dans son domaine de compétences.
– Une personne ayant du mal à voir à moyen et long terme, sera susceptible d’accepter tout type de missions, car elle aura du mal à refuser ou tout du moins, elle aura du mal à construire un plan de carrière.
– Une personne qui se voit refuser une augmentation, soit démissionnera, soit décidera du jour au lendemain de devenir moins productive, moins impliquée, moins engagée.
– Et vous avez une personne qui, au contraire, sait voir à long terme, et construit son plan de carrière comme un business plan. Ce profil est malheureusement peu fréquent.

Je me suis un peu égarée, revenons au titre de cet article : « de l’avantage des SSII ». Justement quel est l’avantage d’être en SSII et pour qui ? L’avantage d’être en SSII c’est la possibilité d’expérimenter tout type de technos, tout type de langages, tout type de domaines fonctionnels, tout type de postes… Vous pouvez passer de développeur à chef de projet technique ou encore d’expert technique à architecte technique, de testeur fonctionnel à chef de projet fonctionnel, … On voit de tout ! Et c’est tant mieux ! Pour tirer son épingle du jeu, il faut être maître de sa carrière. Vous ne vous voyez pas admin Windows, dans ce cas pourquoi s’obstiner à faire des missions sur de l’active directory, du powershell ou encore du IIS. Ce que je veux dire par là, c’est que vous pouvez bien sûr effectuer une mission, pour dépanner, pour tester, pour voir si vous aimez mais s’il s’avère que ce n’est pas le cas, arrêtez ! Oui arrêtez de vous torturer à faire du Windows ! Bon, je mets le mode troll en off avec Windows hihi. Dès le début de votre carrière en SSII, ou même après, discutez, faîtes du networking, voyez comment ont progressé vos congénères, par quels étapes sont-ils passés, quelles épreuves ont-ils dû surmonter ? J’aime beaucoup discuter avec mes collègues chefs de projets techniques, architectes techniques, manager, ou encore DBA. Et c’est à ce moment-là que je comprends les facettes de leurs métiers respectifs, que j’essaie de cerner les qualités à avoir pour mener à bien ces différentes missions, ou encore les formations que je devrais faire pour y arriver.

En résumé, ne restez pas dans votre coin, ouvrez-vous aux autres et découvrez ce que les autres font. C’est dans cette optique que vous pourrez véritablement piloter votre carrière en faisant les bons choix. Un domaine fonctionnel (la finance, les assurances, le public, …) vous tente moins, ne forcez pas et déclinez l’offre de mission. Une techno vous rend malade, choisissez-en une autre à la place. Le tout est d’avoir le choix, me direz-vous. Si on revient à ce que j’ai dit plus haut, on peut toujours se rabattre vers « la mission la moins pire, en attendant » :)

En conclusion, vous pouvez réussir votre carrière en SSII, le tout est d’avoir les bons réflexes dès le départ pour piloter et gérer sa carrière. Discutez, découvrez de nouveaux horizons et choisissez en conséquence ! En tout cas pour l’instant, cela a fonctionné pour moi, cela fait 12 ans que je suis en SSII et je m’y plais bien.

Il y a des hauts et des bas bien sûr (ps : je veux une augmentation !) mais le tout est d’être acteur de sa carrière et non pas se laisser porter par le courant.

Et vous, qu’en pensez-vous ? Avantage ou inconvénient d’être en SSII ? Postez vos comm’ !

Carrière en SSII : avantage ou inconvénient ?

View Results

Loading ... Loading ...

Linux suse : version, yast2

Fatiha ? Sous Linux Suse ?

Comme vous le savez, je suis plus Linux Redhat voire Linux Fedora que Linux Suse. Du coup, quand il faut réaliser des actions professionnelles sous Suse, j’en perds un peu mes moyens… Mais ça c’était avant que j’apprenne l’existence de l’outil Yast (merci Ludo).

Comment connaître la version de Linux Suse :

cat /etc/SuSE-release

Comment lancer l’interface d’administration de Linux Suse :

yast2

En image :

yast2-menu

Afficher la liste des modules disponibles avec yast2 :

yast2 --list

Ensuite afficher un module bien précis, par exemple dans mon cas nfs :

yast2 nfs

En image :

yast2-nfs

C’est tout pour aujourd’hui !

Source : 

cybercity.biz

 

Récupérer la mémoire utilisée par une JVM sous Websphere 8.5.5 avec wsadmin

Scripting en jython

Si vous avez suivi mes dernières aventures, vous savez que je travaille énormément sur Websphere en ce moment et plus particulièrement sur la partie wsadmin de websphere, à savoir la partie scripting. Mes anciens articles sur websphere.

Coeur du script : la récupération de la valeur de la mémoire utilisée par notre JVM. Pensez à remplacer xxServer par le nom de votre JVM.

perfName = AdminControl.completeObjectName ('type=Perf,process=xxServer,*')
perfOName = AdminControl.makeObjectName (perfName)
sigs = ['javax.management.ObjectName', 'java.lang.Boolean']
jvmName = AdminControl.completeObjectName ('type=JVM,process=xxServer,*')
params = [AdminControl.makeObjectName (jvmName), java.lang.Boolean ('false')]
jvmStats=AdminControl.invoke_jmx (perfOName, 'getStatsObject', params, sigs)
UsedMemory=jvmStats.getStatistic( 'UsedMemory').getCount()
print UsedMemory

Comment appeler ce bout de script ? Il faut appeler le script wsadmin.sh de websphere qui lui, déroulera le script ci-dessus. Les paramètres de wsadmin sont détaillés dans cet article.

#!/bin/bash

"$WAS_ROOT/bin/wsadmin.sh" $ADMIN_OPT -lang jython -f `dirname $0`/usedMemory.py

Ensuite on peut faire une boucle pour afficher la valeur de la mémoire utilisée toutes les 5 secondes, avec en prime la date :

import sys
import time
import re

count=3
while count > 0 :
## MAIN
 perfName = AdminControl.completeObjectName ('type=Perf,process=xxServer,*')
 perfOName = AdminControl.makeObjectName (perfName)
 sigs = ['javax.management.ObjectName', 'java.lang.Boolean']
 jvmName = AdminControl.completeObjectName ('type=JVM,process=xxServer,*')
 params = [AdminControl.makeObjectName (jvmName), java.lang.Boolean ('false')]
 jvmStats=AdminControl.invoke_jmx (perfOName, 'getStatsObject', params, sigs)
 UsedMemory=jvmStats.getStatistic( 'UsedMemory').getCount()
 now = time.localtime(time.time())
 print time.strftime("%d/%m/%y %H:%M:%S", now),";",UsedMemory
 time.sleep(5)

Sources : 

Python : Date et parsing de texte

Programmation en python

Pour les besoins d’un script en python, j’ai besoin de petits bouts de code. En effet, suite à mon article sur websphere, j’ai besoin de parser des résultats et de les stocker dans un fichier texte. On va voir ensemble comment procéder.

Récupération de la date du jour :

import time
# Obtenir l'heure et la date locale
now = time.localtime(time.time())

print time.strftime("%y/%m/%d %H:%M", now)
date en python

ça affiche :

16/09/09 09:07

Ensuite, ce que je veux faire, c’est parser la ligne ci-dessous et récupérer uniquement la valeur de UsedMemory :

jvmRuntimeModule | HeapSize=524288;;;; FreeMemory=205940;;;; UsedMemory=318347;;;; UpTime=1356524;;;; ProcessCpuUsage=0;;;;

Je vous rappelle comme j’avais fait en ksh pour parser :

cat resultat | grep UsedMemory | awk -F"=" ' { print $4 }' | awk -F";" ' { print $1 }'
Parsing en ksh

On va décomposer étape par étape, je vais commencer par utiliser la commande split et lui indiquer divers séparateurs. Je l’avais déjà utilisé lors d’un précédent article, mais bon, ça fait déjà 4 ans et demi !

import re

example = "jvmRuntimeModule | HeapSize=524288;;;; FreeMemory=205940;;;; UsedMemory=318347;;;; UpTime=1356524;;;; ProcessCpuUsage=0;;;;"

parts = example.split()
print parts[4]
other = parts[4].split('=')
print other[1]
fin = other[1].split(';')
print fin[0]
parsing step by step

Voilà le résultat :

UsedMemory=318347;;;;
318347;;;;
318347

Optimisation de code

C’est un code qui fonctionne, me direz-vous, mais peut-on faire ça en deux lignes au lieu de trois ?

import re

example = "jvmRuntimeModule | HeapSize=524288;;;; FreeMemory=205940;;;; UsedMemory=318347;;;; UpTime=1356524;;;; ProcessCpuUsage=0;;;;"

partie = example.split(';')
print partie[8]
valeur = partie[8].split('=')
print valeur[1]

Résultat :

 UsedMemory=318347
318347

Il faut tout de même que je teste la présence de UsedMemory :

import re

example = "jvmRuntimeModule | HeapSize=524288;;;; FreeMemory=205940;;;; UsedMemory=318347;;;; UpTime=1356524;;;; ProcessCpuUsage=0;;;;"
if "UsedMemory" in example:
 partie = example.split(';')
 print partie[8].split('=')[1]

Si on revient à mon code initial, il faut que j’écrive sur la même ligne la date et la valeur d’UsedMemory. Pour l’instant, le code ci-dessous ne fonctionne pas !

for stat in statsList:
  if "UsedMemory" in str(stat):
   now = time.localtime(time.time())
   partie = stat.split(';')
   print time.strftime("%d/%m/%y %H:%M", now) , partie[8].split('=')[1]
   time.sleep(5)
Belle erreur python !

 

Traceback (innermost last):
  File "<string>", line 64, in ?
TypeError: string member test needs char left operand

Recherche Google

Du coup, je fais une petite recherche sur Google et je tombe sur l’excellent site stackoverflow. Je rajoute au passage un séparateur ; entre mes différents champs, ce qui me génèrera du « pseudo csv ».

for stat in statsList:
  if stat.find('UsedMemory=') >= 0:
   now = time.localtime(time.time())
   partie = stat.split(';')
   print time.strftime("%d/%m/%y %H:%M", now),";",partie[8].split('=')[1]
   time.sleep(5)

Résultat :

09/09/16 10:29 ; 383886
09/09/16 10:29 ; 383886
09/09/16 10:29 ; 385079
...
09/09/16 10:31 ; 396919
09/09/16 10:31 ; 396919
09/09/16 10:31 ; 398375
09/09/16 10:31 ; 396919

Pour la partie écriture dans un fichier de logs, pour l’instant je vais utiliser ksh :)

Sources : 

Mes questions sur stackoverflow au sujet de websphere et du monitoring

J’ai besoin de votre aide au sujet de websphere.

Vous trouverez ci-dessous mes questions postées aussi sur stackoverflow.

Monitoring : Tivoli performance viewer embedded on websphere 8.5.5 has stopped few minutes after

Websphere, perfservlet and nagios

En ce moment j’ai deux problèmes majeurs :

  • trouver un bout de script permettant d’intégrer le monitoring généré via le performance monitoring infrastructure (PMI) à nagios

example perfservlet

  • faire en sorte que le monitoring natif à websphere ne s’arrête pas au bout de quelques minutes, ce monitoring est fait via le tivoli performance viewer. de plus en cliquant sur le bouton « start logging », cela génère un log contenant toutes les données remontées.

example of 15 minutes monitoring

Merci de votre aide,

En attendant de trouver la solution, j’utilise wsadmin et le langage jython, comme mon collègue me l’a expliqué. Mon script jython recherche les informations demandées, à savoir les données PMI de jvmRuntimeModule :

jvmRuntimeModule | HeapSize=4194304;;;; FreeMemory=1760605;;;; UsedMemory=2433698;;;; UpTime=1273611;;;; ProcessCpuUsage=0;;;;

Ensuite, j'utilise mes connaissances ! Je parse avec mon bon vieux langage ksh sous Linux pour récupérér uniquement ce que je désire (usedMemory). Enfin je stockerai tout ça dans un fichier csv, avec date et valeur. Du coup, je pourrai intégrer le résultat en crontab pour mes tests persos. Et si jamais je n'ai pas encore trouvé la solution, je balancerai le tout dans un fichier pour mes collègues de Nagios ;)  Ce n'est pas du beau code mais ça fonctionne !

Merci jython, merci ksh, merci Linux :)

Coeur du code (sans les tests, les dates, sans les logs …)

/tmp/stats.sh monServer | grep UsedMemory | awk -F"=" ' { print $4 }' | awk -F";" ' { print $1 }'

2433698

Voilà mon bout de code ksh en action :

10:26:02;383439
10:28:01;294015
10:30:03;313819
10:32:03;329456
10:34:02;340116

Mise à jour :

Plus j’avance, plus mes interrogations s’accumulent. Mais le plus important c’est d’avancer vous allez me dire.  Donc en bonus, ci-dessous une nouvelle question postée sur stackoverflow, mon nouvel ami.

How can I launch wsadmin in background on websphere 8.5.5?

Pour résumer, le but maintenant est de pouvoir lancer wsadmin en background, en effet ce process propre à websphere met beaucoup trop de temps à répondre, c’est comme s’il redémarrait à chaque fois…

Mise à jour : 

Une personne sur stackoverflow a répondu à ma question concernant Tivoli Performance viewer et m’a montré comment paramétrer la durée du logging. Je suis trop contente !

parametrage-logging-tivoli-performance-viewer

Mise à jour :

Génial, on a répondu à une autre de mes questions sur stackoverflow, celle concernant wsadmin. En fait il faut, non pas lancer wsadmin x fois, mais lancer n fois le script inclus dans wsadmin. En effet, le but de mon script était de collecter des données PMI. Donc il faut faire une boucle for ou while dans mon script python qui fait la collecte de données PMI. Et intégrer une commande sleep dans le script pour avoir des données toutes les x secondes. Parfait, j’ai testé et ça fonctionne ! Merci stackoverflow ! Ci-dessous un extrait de code :


import sys
import time
from org.python.modules import re
statsList=[]
firstModulesList=["jvmRuntimeModule"]


#....
count=3
while count > 0 :
## MAIN
#...
for stat in statsList:
print stat
time.sleep(30)