Tuesday, January 31, 2012

HP QTP, Click LInk in specified cells in the data grid of siliverlight, SlvTable

SlvTable has the click method, by the x, y has to be the position relative to the parent control (table or the grid here.)

so , get the top location of the table itself, then run some basic math cacaluation, you can click any cells with links,

Here is one snippet to click [3,3] links,

myx=browser("HomePage).Page("Module1").SlvWindow("RootVisualWrapper").SlvTable("Grid1").GetCellProperty(3,3,"x")
myy=browser("HomePage).Page("Module1").SlvWindow("RootVisualWrapper").SlvTable("Grid1").GetCellProperty(3,3,"y")

parentx=browser("HomePage).Page("Module1").SlvWindow("RootVisualWrapper").SlvTable("Grid1").GetROProperty("x")
parenty=browser("HomePage).Page("Module1").SlvWindow("RootVisualWrapper").SlvTable("Grid1").GetROProperty("y")

w=browser("HomePage).Page("Module1").SlvWindow("RootVisualWrapper").SlvTable("Grid1").GetCellProperty(3,3,"width")
h=browser("HomePage).Page("Module1").SlvWindow("RootVisualWrapper").SlvTable("Grid1").GetCellProperty(3,3,"height")
 

rx=myx + w/2-parentx
ry=myy + h/2-parenty

browser("HomePage).Page("Module1").SlvWindow("RootVisualWrapper").SlvTable("Grid1").Click rx, ry

Friday, January 20, 2012

Oracle Coherence Monitoring, Node max memory keep changing.

If you turn on the coherence monitoring by setting the jvm property, -Dtangosol.coherence.management.remote=true, you can check the Coherence status via the JMX client like Jconsole.  I.e you can click the Node of Coherence domain, and see all the Nodes information, like MaxMemory, FreeMemory.

image
always we set up the heap size constant. min and max to the same value, I set it up to 300M here.
But when I check the node attributes of max and free memory, the max one is not 300M, and sometimes, even keep changing.
image

then I check the code, to return the MemoryMaxMB, pretty simple, just call runtime to get the maxmemory.
image
I created the following bTrace script, and make sure it is calling this code. And I am right.

@OnMethod(clazz = "com.tangosol.coherence.component.net.management.model.localModel.ClusterNodeModel", method = "getMemoryMaxMB", location = @Location(value = Kind.RETURN))
public static void getMemoryMaxMB(@Return int i) {
    BTraceUtils.println("get max");
    BTraceUtils.println(i);

}


then the question is why the maxmemory here is 287 or some value instead of 300M ?
I did a another test, change the JVM to Jrockit, what do you expect? it shows 300M.

image

conclusion, the MemoryMaxMB reported here vary by JVM. because each JVM vendor has it’s own implementation of the JVM.

Wednesday, December 14, 2011

Cassandra OpsCenter Community features

played with the Ops several hours, here are the major feature In my option.

Monitoring the whole cluster status, like req/s, disk capacity, IO
image

Node tool visualization and do maintenance job just a click away. Such as, drain one node, compact, or get one node out of cluster(decommission.), rebalance cluster is only available in enterprise version sadly.
image

Clicking the Node, you can do a lot stuff, such as view the multi-DC replications.

image

Data modeling and explor( create keyspace , and view data), update column family.
image

Exploring data,
image

Monitoring again,
image

Actions on node, (like the node tool)

image

Cassandra Opscenter, connected to the cluster, But No Node information get listed

configration is pretty simple for opscenter, just change files under conf fodler, point to correct seed server, then I can query the data from Opscenter now.

image
How ever, the dashboard, there is no node information.
image
When I check the logs under opscenter , when it try to get node infrmation from the thift API, get error, that explains why, return no results.
image

After did a lot testing, I noticed this is because of the version mismatch, for Cassandra cluster, it runs on 1.0 version.
image

while the ops center version is 1.3.1, you can tell from the console on the left bottom
image

then I try update the Cassandra to the latest version 1.0.5, it works without any problem.
image

Cassandra OpsCenter,Failed to load application: libpython2.6.so.1.0

Unzip the OpsCenter file, Instal the 2.7 Python, then run the opscenter, failed get the following error.

[root@e3 opscenter]# bin/opscenter
/usr/local/bin/python2.7
Traceback (most recent call last):
File "/usr/lib/cassandra/opscenter-1.3.1/lib/py-redhat/2.6/shared/amd64/twisted/application/app.py", line 631, in run
runApp(config)
File "/usr/lib/cassandra/opscenter-1.3.1/lib/py-redhat/2.6/shared/amd64/twisted/scripts/twistd.py", line 23, in runApp
_SomeApplicationRunner(config).run()
File "/usr/lib/cassandra/opscenter-1.3.1/lib/py-redhat/2.6/shared/amd64/twisted/application/app.py", line 374, in run
self.application = self.createOrGetApplication()
File "/usr/lib/cassandra/opscenter-1.3.1/lib/py-redhat/2.6/shared/amd64/twisted/application/app.py", line 439, in createOrGetApplication
application = getApplication(self.config, passphrase)
--- <exception caught here> ---
File "/usr/lib/cassandra/opscenter-1.3.1/lib/py-redhat/2.6/shared/amd64/twisted/application/app.py", line 450, in getApplication
application = service.loadApplication(filename, style, passphrase)
File "/usr/lib/cassandra/opscenter-1.3.1/lib/py-redhat/2.6/shared/amd64/twisted/application/service.py", line 400, in loadApplication
application = sob.loadValueFromFile(filename, 'application', passphrase)
File "/usr/lib/cassandra/opscenter-1.3.1/lib/py-redhat/2.6/shared/amd64/twisted/persisted/sob.py", line 210, in loadValueFromFile
exec fileObj in d, d
File "bin/start_opscenter.py", line 1, in <module>
from opscenterd import opscenterd_tap
File "build/lib/python2.7/site-packages/opscenterd/opscenterd_tap.py", line 16, in <module>

File "build/lib/python2.7/site-packages/opscenterd/Config.py", line 392, in init_config

File "build/lib/python2.7/site-packages/opscenterd/events/plugins/CassandraStore.py", line 12, in <module>

File "build/lib/python2.7/site-packages/opscenterd/CassandraService.py", line 17, in <module>

File "build/lib/python2.7/site-packages/opscenterd/Cluster.py", line 14, in <module>

File "build/lib/python2.7/site-packages/opscenterd/AgentServer.py", line 23, in <module>

File "build/lib/python2.7/site-packages/opscenterd/HttpUtils.py", line 10, in <module>

File "/usr/lib/cassandra/opscenter-1.3.1/lib/py-redhat/2.6/5/amd64/OpenSSL/__init__.py", line 11, in <module>
import rand, crypto, SSL, tsafe
exceptions.ImportError: libpython2.6.so.1.0: cannot open shared object file: No such file or directory

Failed to load application: libpython2.6.so.1.0: cannot open shared object file: No such file or directory


When I list the LibPython module under /usr/lib64/libpython* , It only has the 2.4 modue. So we need to install the 2.6 Module required by the opscenter.

1, first, Check my OS, it ‘s Centos 5

image

go to http://download.fedora.redhat.com/pub/epel/5/x86_64/, download the epel-release-5-4.noarch.rpm 

2. Update the rpm, “rpm -Uvh epel-release*rpm”

3. yum install python26-libs

image

Once done, you can see the 2.6 modules under the lib folder,
image

Now we can run the opscenter now.

Tuesday, December 6, 2011

How to: write a key mapper or Key transformation utility in 10 minutes

Question, need a utility to map or transform the key stoke, say when you press F6, replace the contents with a Mailing address, and Press F7 for the zip code of your city.

  Answer, In C#, it’s easy and not easy. you have to wrap several Native APIs to hook the mapping point into the system, Easy one is it has one Great methods called Sendkeys.Send.

So eventually, we need one file to keep the mapping logic , here I just pickup the .config file, then the code. Code is here,you may just copy and save it as .cs file, then compile it.

using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Text;
using System.Collections.Specialized;

public class KeyMapper
{
    private const int WH_KEYBOARD_LL = 13;
    private const int WM_KEYDOWN = 0x0100;

    private static LowLevelKeyboardProc _proc = HookCallback;
    private static IntPtr _hookID = IntPtr.Zero;
    private static NameValueCollection mappings;
    public static void Main()
    {
        //Check to see no duplicate running
        if(Process.GetProcessesByName("af").Length>1)
        {
            return;
        }
        //keep it small
        Console.SetWindowSize(1,2);

        mappings = System.Configuration.ConfigurationManager.AppSettings;

        _hookID = SetHook(_proc);
        Application.Run();
        UnhookWindowsHookEx(_hookID);
    }

    private static IntPtr SetHook(LowLevelKeyboardProc proc)
    {
        using (Process curProcess = Process.GetCurrentProcess())
        using (ProcessModule curModule = curProcess.MainModule)
        {
            return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
                GetModuleHandle(curModule.ModuleName), 0);
        }
    }

    private delegate IntPtr LowLevelKeyboardProc(
        int nCode, IntPtr wParam, IntPtr lParam);

    private static IntPtr HookCallback(
        int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
        {
            int vkCode = Marshal.ReadInt32(lParam);
            String key = ((Keys)vkCode).ToString();

            if (mappings[key] != null)
            SendKeys.Send(mappings[key]);
            
        }
        return CallNextHookEx(_hookID, nCode, wParam, lParam);
    }

 


    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr SetWindowsHookEx(int idHook,
        LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool UnhookWindowsHookEx(IntPtr hhk);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
        IntPtr wParam, IntPtr lParam);

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr GetModuleHandle(string lpModuleName);
}

Config  file, like mine,
image

Then we you started the console application.
wherever you enter F6, it will put a sample address there.
image

If you can’t compile the code , leave a comment , I will email you the compiled bits.

Wednesday, November 30, 2011

Error: Vmplayer, NO Disk, There is no disk in the drive. Please insert a disk into drive \Device\Harddisk2\DR4.

One Day I get this error, when I just open the Vmware player, Kept popping up this error when I click the VMs.
image

Then I run a diskpart from the cmd shell, then call “list disk” it will show all the hard disks and their sizes
image
the disk2 is a weird Disk, Size is 0B.

then checked all my hard disk, I plugged my phone into the USB port. unplug the cable, the disk 2 is gone.
image

the error of NO disk was fixed too.

 
Locations of visitors to this page