Sounds good to me... any objections Diogo, Alan?
On Jun 28, 2011, at 2:59 PM, Zubair Nabi wrote:
> Guys,
>
> I propose that we add a field: required string testType
> to message Test to differentiate between a website test and a service test.
> Similar to the field in message Events.
>
> Also, Alan you haven't added the message that will encapsulate all other
> messages for p2p communication to the common proto. Can you please do so now?
> Or we still haven't decided that this is the best approach? Because it has my
> vote. Like you said, if a message doesn't exist, it will not take any space.
>
> On Fri, Jun 10, 2011 at 8:13 PM, Zhongjie Wang <[email protected]> wrote:
> Hi Adriano,
>
> On Fri, Jun 10, 2011 at 11:03 PM, Adriano Monteiro Marques
> <[email protected]> wrote:
> Hi,
>
> On Jun 10, 2011, at 11:34 AM, Zhongjie Wang wrote:
>
>> Hi Guys,
>>
>> On Fri, Jun 10, 2011 at 10:02 PM, Zubair Nabi <[email protected]>
>> wrote:
>> Hi Guys,
>>
>>
>>> If the token is sent with the message in plain text, then someone may
>>> perform a wire-tapping attack.
>>> And if the two party in communication has already had a handshake progress
>>> and figured out a symmetric key
>>> for current session, then we don't need the token i guess, the symmetric
>>> key itself is enough for the encryption and authentication purpose.
>>> It's OK to keep agentID as you said.
>>> Hm... Zubair helped me to set that there, let's just confirm with him that
>>> we don't need it there. Your consideration is fair, but I'm not sure this
>>> is the only purpose the token is there.
>>
>> The token is also supposed to reflect the state of the agent binary. For
>> example, if the binary is updated, the symmetric key would remain the same
>> but the token would change.
>> And we aren't going to send messages in plain text. We're going to encrypt
>> each message.
>>
>> Yes, in the Event message we don't need to send back the unnecessary fields.
>> But since they (redirectLink, htmlResponse, htmlMedia) are "optional" in
>> the Detail structure,
>> they can be omitted while sending.
>> Because when we send back Detail in Event message, we need to clone it and
>> only send the necessary fields.
>> Ok, sounds good. Can you get them fixed, and let the others know about your
>> fix?
>> +1
>>
>> So that's what I propose at the beginning.
>> All messages will be instantiate as a common message type.
>> It has a type field and some option fields.
>> The receiver will instantiate it as a common ICMMessage for example,
>> then read the type field, and choose which optional field to read.
>> The optional fields which doesn't exists in a message don't take any spaces.
>> e.g.
>> message ICMMessage {
>> required int64 agentID = 1;
>> required int32 type = 2;
>> optional AssignTask assignTask = 100;
>> optional UpgradeToSuper upgradeToSuper = 101;
>> optional VersionUpdate versionUpdate = 102;
>> // extensions 100 to max;
>> }
>> Did you try this approach? Not sure it will work with protocol buffers.
>>
>> Luis and I discussed this a while back and we came to the conclusion that
>> this won't be work. In case of p2p communication, we will have to send an
>> additional message.
>> For example our send would look something like send(string type, string
>> message)
>> At the receiving end, this "type" would tell us which type of Protobuf
>> message this is.
>>
>> Hi Zubair, I'm using the way you said now. But I think what I mentioned also
>> works. I just tested that. ;)
>> Here's the .proto file and test.py I used.
>
> Oh, now I understood your approach. We would have one type of message that
> would encapsulate all others, right?
> The problem with this approach is that the message gets to big and slower to
> process. Though it works, protobuf is got to parse the whole thing, and it
> will place several markers in the message to indicate that the field is
> empty. This can escalate to a few hundreds easily as we extend our app.
>
>
> I was worrying about the message size. But after tested, I found even I added
> more optional fields to that message. The size didn't grow, as I have printed
> out. (I added ExtendedMessageType up to 10).
> I think it's because the protobuf message use unique tag number to indicate
> the field.
> If an optional field doesn't exist, it will not take any space in the message.
>
>>
>> test.proto:
>>
>> // this is a sample message sent from the aggregator to the agent
>> message ICMMessage {
>> required int32 type = 1;
>>
>> optional AssignTask assignTask = 100;
>> optional UpgradeToSuper upgradeToSuper = 101;
>> optional ExtendedMessageType1 em1 = 102;
>> optional ExtendedMessageType2 em2 = 103;
>> optional ExtendedMessageType3 em3 = 104;
>> // extensions 100 to max;
>> }
>>
>> message AssignTask {
>> required int32 foo = 1;
>> required int32 bar = 2;
>> }
>>
>> message UpgradeToSuper {
>> required int32 foo = 1;
>> required int32 bar = 2;
>> }
>>
>> message ExtendedMessageType1 {
>> required int32 foo = 1;
>> required int32 bar = 2;
>> }
>>
>> message ExtendedMessageType2 {
>> required int32 foo = 1;
>> required int32 bar = 2;
>> }
>>
>> message ExtendedMessageType3 {
>> required int32 foo = 1;
>> required int32 bar = 2;
>> }
>>
>>
>> test.py:
>>
>> import test_pb2
>>
>> MSG_ASSIGN_TASK = 1
>> MSG_UPGRADE_TO_SUPER = 2
>> MessageTypes = {1:'AssignTask', 2:'UpgradeToSuper'}
>>
>> msg = test_pb2.ICMMessage()
>> msg.type = MSG_ASSIGN_TASK
>> msg.assignTask.foo = 11
>> msg.assignTask.bar = 22
>> msg_send = msg.SerializeToString()
>>
>> print(msg)
>> print(msg_send)
>> print("Length: %d" % len(msg_send))
>>
>> msg_recv = msg_send
>>
>> msg1 = test_pb2.ICMMessage()
>> msg1.ParseFromString(msg_recv)
>> print("Got a message. Type: %s" % MessageTypes[msg1.type])
>> print("Detail:")
>> print(msg1.assignTask)
>>
>> The result:
>>
>> <image.png>
>>
>>
>>
>> On Fri, Jun 10, 2011 at 6:49 PM, Adriano Monteiro Marques
>> <[email protected]> wrote:
>> Hi Alan,
>>
>> On Jun 10, 2011, at 12:53 AM, Zhongjie Wang wrote:
>>
>>> Hi Adriano,
>>> Thanks for the timely response. :)
>>>
>>> On Thu, Jun 9, 2011 at 10:44 PM, Adriano Monteiro Marques
>>> <[email protected]> wrote:
>>> Hi Alan,
>>>
>>> On Jun 9, 2011, at 3:01 AM, Zhongjie Wang wrote:
>>>
>>>> Hi all,
>>>>
>>>> About the message format, I have some comments.
>>>> 1. Seems there're duplicate fields in SendWebsiteReport and
>>>> SendServiceReport:
>>>> 162
>>>> // send_report
>>>> 163
>>>> message SendWebsiteReport {
>>>> 164
>>>> required RequestHeader header = 1;
>>>> 165
>>>> required WebsiteReport report = 2;
>>>> 166
>>>> }
>>>> In the RequestHeader structure to the aggregator, there're are
>>>> token and agentID. And in WebsiteReport.ICMReport, there're also agentID.
>>>> Though I didn't know the difference between token and agentID. I suggest
>>>> we eliminate the agentID field in ICMReport.
>>>
>>> Token is our to confirm to the aggregator that we are legitimate. On the
>>> duplicated agentID, it is fine: If a node is passing a website report from
>>> another node, then the ICMReport will show the agentID for the origin node,
>>> and the RequestHeader will provide the passing agent's id.
>>>
>>>
>>> If the token is sent with the message in plain text, then someone may
>>> perform a wire-tapping attack.
>>> And if the two party in communication has already had a handshake progress
>>> and figured out a symmetric key
>>> for current session, then we don't need the token i guess, the symmetric
>>> key itself is enough for the encryption and authentication purpose.
>>> It's OK to keep agentID as you said.
>>
>> Hm... Zubair helped me to set that there, let's just confirm with him that
>> we don't need it there. Your consideration is fair, but I'm not sure this is
>> the only purpose the token is there.
>>
>>>
>>>> 2. Besides that, the optional fields: redirectLink, htmlResponse,
>>>> htmlMedia, seems to be better in the WebsiteReportDetail structure,
>>>> because it's more test specific. I suppose the Report messages should have
>>>> only two parts, the header and the detail.
>>>
>>> Check the Event message... when we send back a WebsiteReportDetail or
>>> ServiceReportDetail we don't send out those details as they're not really
>>> necessary.
>>>
>>>
>>> Yes, in the Event message we don't need to send back the unnecessary
>>> fields.
>>> But since they (redirectLink, htmlResponse, htmlMedia) are "optional" in
>>> the Detail structure,
>>> they can be omitted while sending.
>>> Because when we send back Detail in Event message, we need to clone it and
>>> only send the necessary fields.
>>
>> Ok, sounds good. Can you get them fixed, and let the others know about your
>> fix?
>>
>>>
>>>> 3. Since we don't have a field in the message to identify the
>>>> message type, I don't know how we can create a message instance after
>>>> receiving a bunch of raw bytes. Currently I send the message type string
>>>> before send the message itself. But I think the better solution is tag it
>>>> in the message structure.
>>>
>>> Even if we had a field in the message, how would we retrieve it to know the
>>> type prior to instantiating it? What we're doing on the Aggregator side is
>>> to presume the sort of message a given API is supposed to send/receive.
>>> Perhaps we could do the same with the desktop agent, what do you think?
>>>
>>>
>>> So that's what I propose at the beginning.
>>> All messages will be instantiate as a common message type.
>>> It has a type field and some option fields.
>>> The receiver will instantiate it as a common ICMMessage for example,
>>> then read the type field, and choose which optional field to read.
>>> The optional fields which doesn't exists in a message don't take any spaces.
>>> e.g.
>>> message ICMMessage {
>>> required int64 agentID = 1;
>>> required int32 type = 2;
>>>
>>> optional AssignTask assignTask = 100;
>>> optional UpgradeToSuper upgradeToSuper = 101;
>>> optional VersionUpdate versionUpdate = 102;
>>> // extensions 100 to max;
>>> }
>>
>> Did you try this approach? Not sure it will work with protocol buffers.
>>
>>>
>>>> 4. Another slightly modification, I suggest that we use float type
>>>> for responseTime, the unit is seconds, for accuracy.
>>>
>>> We're using miliseconds there as mentioned in a previous email, that's the
>>> reason why we use integer. It saves on message size and keeps accuracy.
>>>
>>> Well noticed Alan! Keep pushing! Let me know if there still is anything you
>>> feel like it is wrong or that is stopping you from progressing.
>>>
>>>
>>> Thanks, Adriano! I'll keep on thinking and make it perfect. :)
>>>
>>>
>>> Cheers!
>>>
>>>>
>>>> Best Regards.
>>>> Alan
>>>>
>>>> On Sat, Jun 4, 2011 at 5:34 PM, Adriano Monteiro Marques
>>>> <[email protected]> wrote:
>>>> Right, mainly for nodes who stays connected for long periods of time.
>>>> Also, if we want a test to be run ASAP, we need to send this info
>>>> everytime so the node knows of a brand new test version, updates their
>>>> test set and run them ASAP. On the software version, if we figure any
>>>> security issue, the nodes will also update ASAP.
>>>>
>>>>
>>>> On Jun 4, 2011, at 6:22 AM, Zubair Nabi wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I think the idea was to keep the binary and test versions as fresh as
>>>>> possible. This ResponseHeader would make sure of that.
>>>>>
>>>>> On Sat, Jun 4, 2011 at 4:04 AM, Diogo Pinheiro
>>>>> <[email protected]> wrote:
>>>>> Hi
>>>>>
>>>>> I have another question. Why the ResponseHeader has the currentVersionNo
>>>>> and currentTestsVersion ? I think we shouldn't send that information all
>>>>> the time. Just when the agent connect, and in a rpc call.
>>>>>
>>>>> What do you think ?
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Best,
>>>>> __
>>>>> Zubair
>>>>
>>>> ---
>>>> Adriano Monteiro Marques
>>>>
>>>> http://www.thoughtspad.com
>>>> http://www.umitproject.org
>>>> http://blog.umitproject.org
>>>> http://www.pythonbenelux.org
>>>>
>>>> "Don't stay in bed, unless you can make money in bed." - George Burns
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Simplify data backup and recovery for your virtual environment with
>>>> vRanger.
>>>> Installation's a snap, and flexible recovery options mean your data is
>>>> safe,
>>>> secure and there when you need it. Discover what all the cheering's about.
>>>> Get your free trial download today.
>>>> http://p.sf.net/sfu/quest-dev2dev2
>>>> _______________________________________________
>>>> Umit-devel mailing list
>>>> [email protected]
>>>> https://lists.sourceforge.net/lists/listinfo/umit-devel
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Zhongjie Wang
>>>> Master Candidate
>>>> Computer System Architecture
>>>> Peking University, China
>>>
>>>
>>> ---
>>> Adriano Monteiro Marques
>>>
>>> http://www.thoughtspad.com
>>> http://www.umitproject.org
>>> http://blog.umitproject.org
>>> http://www.pythonbenelux.org
>>>
>>> "Don't stay in bed, unless you can make money in bed." - George Burns
>>>
>>>
>>>
>>>
>>> --
>>> Zhongjie Wang
>>> Master Candidate
>>> Computer System Architecture
>>> Peking University, China
>>
>>
>> ---
>> Adriano Monteiro Marques
>>
>> http://www.thoughtspad.com
>> http://www.umitproject.org
>> http://blog.umitproject.org
>> http://www.pythonbenelux.org
>>
>> "Don't stay in bed, unless you can make money in bed." - George Burns
>>
>>
>>
>>
>> --
>> Best,
>> __
>> Zubair
>>
>>
>>
>> --
>> Zhongjie Wang
>> Master Candidate
>> Computer System Architecture
>> Peking University, China
>
>
> ---
> Adriano Monteiro Marques
>
> http://www.thoughtspad.com
> http://www.umitproject.org
> http://blog.umitproject.org
> http://www.pythonbenelux.org
>
> "Don't stay in bed, unless you can make money in bed." - George Burns
>
>
>
>
> --
> Zhongjie Wang
> Master Candidate
> Computer System Architecture
> Peking University, China
>
>
>
> --
> Best,
> __
> Zubair
---
Adriano Monteiro Marques
http://www.thoughtspad.com
http://www.umitproject.org
http://blog.umitproject.org
http://www.pythonbenelux.org
"Don't stay in bed, unless you can make money in bed." - George Burns
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
Umit-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/umit-devel